2009-10-22 35 views
9

Tôi có một đối tượng từ điển trăn có chứa một boolean cho mỗi chìa khóa, ví dụ .:boolean Đếm trong từ điển

d = {'client1': True, 'client2': False} 

cách dễ nhất và ngắn gọn nhất để đếm số lượng các giá trị thật trong từ điển là gì?

Trả lời

19

Để rõ ràng:

num_true = sum(1 for condition in d.values() if condition) 

Đối conciseness (chỉ hoạt động này vì Đúng là một lớp con của int với giá trị 1):

num_true = sum(d.values()) 
+2

+1 để được giải thích. –

2
sum(d.values()) 
+0

Đơn giản và chung, người ta chỉ biết rằng boolean cũng là số nguyên trong Python, và cụ thể là 0 và 1 (không đáng ngạc nhiên). – u0b34a0f6ae

+0

đó là tài liệu dành cho: http://docs.python.org/library/stdtypes.html#boolean-values ​​ – SilentGhost

1

Trong Python 2.*, sum (d. itervalues ​​()) hơi ngắn gọn hơn sum(d.values()) nhiều người đang đề xuất (4 ký tự nhiều hơn ;-), nhưng tránh vật chất không cần thiết trong danh sách các giá trị và do đó tiết kiệm bộ nhớ (và có thể là thời gian) khi bạn có một từ điển lớn để giải quyết.

Theo một số người đã chỉ ra, điều này hoạt động tốt, vì bools được ints (một lớp con, cụ thể):

>>> False==0 
True 
>>> False+True 
1 

do đó, không cần dùng lời quanh co if khoản.

2
a.values().count(True) 
+1

rõ ràng, nhưng không rõ ràng như sử dụng 'sum()' IMO. Sẽ ngừng hoạt động khi 'dict.values' của Python 3 trả về một chế độ xem có thể thay đổi, không phải danh sách. – u0b34a0f6ae

+1

làm thế nào là nó không rõ ràng như sử dụng "tổng hợp"? nó đọc "đếm số lượng các phần tử trong các giá trị() có giá trị là True"; nó là một bản dịch trực tiếp của vấn đề trong khi sum() giới thiệu một mức độ không xác định khái niệm. –

+0

thực sự đây là tiếng Anh nhiều hơn sử dụng đúng như một số. – tarrasch

Các vấn đề liên quan