2009-10-22 4 views
9

У меня есть питон объект словаря, который содержит логическое значение для каждого ключа, например .:Счетные булевы в словаре

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

Что является самым простым и наиболее краткий способ подсчитать количество истинных значений в словаре?

ответ

19

Для ясности:

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

Для краткости (это работает, потому что Истинный подкласс Int со значением 1):

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

+1 для пояснения. –

2
sum(d.values()) 
+0

Простой и общий, нужно только знать, что булевы также являются целыми числами в Python, а конкретно 0 и 1 (не удивительно). – u0b34a0f6ae

+0

Вот что такое документы: http://docs.python.org/library/stdtypes.html#boolean-values ​​ – SilentGhost

1

В Python 2.*, сумма (д. itervalues ​​()) немного менее кратким, чем sum(d.values()), многие предлагают (еще 4 символа ;-), но избегают излишне материализовать список значений и, таким образом, сохраняют память (и, вероятно, время), когда у вас есть большой словарь для решения.

Как некоторые уже отмечал, это работает отлично, потому что Bools является Интс (подкласс, в частности):

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

поэтому нет необходимости в многословные if статей.

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

ясно, но не так ясно, как использование 'sum()' IMO. Не прекратит работать, когда «dict.values» в Python 3 вернет доступное представление, а не список. – u0b34a0f6ae

+1

Как это не так ясно, как использование «суммы»? он читает «подсчитывает количество элементов в значениях(), значение которых равно True»; это прямой перевод проблемы, тогда как sum() вводит один уровень концептуальной направленности. –

+0

На самом деле это более английский, чем использование true в качестве числа. – tarrasch