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ì?
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ì?
Để 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())
sum(d.values())
Đơ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
đó là tài liệu dành cho: http://docs.python.org/library/stdtypes.html#boolean-values – SilentGhost
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.
a.values().count(True)
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
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. –
thực sự đây là tiếng Anh nhiều hơn sử dụng đúng như một số. – tarrasch
+1 để được giải thích. –