Подсчет логических значений в словаре
-
05-07-2019 - |
Вопрос
У меня есть объект словаря python, который содержит логическое значение для каждого ключа, например:
d = {'client1': True, 'client2': False}
Какой самый простой и лаконичный способ подсчитать количество истинных значений в словаре?
Решение
Для ясности:
num_true = sum(1 for condition in d.values() if condition)
Для краткости (это работает, потому что True является подклассом int со значением 1):
num_true = sum(d.values())
Другие советы
sum(d.values())
a.values().count(True)
В Python 2.*
, sum(d.itervalues()) немного менее лаконичен, чем sum(d.values())
многие предлагают (еще 4 символа;-), но избегают ненужной материализации списка значений и таким образом экономят память (и, возможно, время), когда вам приходится иметь дело с большим словарем.
Как указывали некоторые, это работает нормально, потому что bools - это целые числа (в частности, подкласс).:
>>> False==0
True
>>> False+True
1
следовательно, нет необходимости в обходных if
пункты.