获取与dict python中的键相关联的值的计数

时间:2016-02-08 12:10:46

标签: python python-2.7 dictionary

dict列表就像。

[{'id': 19, 'success': True, 'title': u'apple'},
 {'id': 19, 'success': False, 'title': u'some other '},
 {'id': 19, 'success': False, 'title': u'dont know'}]

我想要计算successTrue的dict有多少。

我试过了,

len(filter(lambda x: x, [i['success'] for i in s]))

如何使用pythonic方式使其更优雅?

3 个答案:

答案 0 :(得分:9)

您可以使用sum()来添加布尔值; True在数字上下文中为1,False为0:

sum(d['success'] for d in s)

这是有效的,因为Python bool类型是int的子类,出于历史原因。

如果你想让它明确,你可以使用条件表达式,但在我看来,可读性没有改善:

sum(1 if d['success'] else 0 for d in s)

答案 1 :(得分:1)

另一种方式是

len(filter(lambda x:x['success'], s))

如果您在dict中没有'成功',它可能会崩溃

len(filter(lambda x:x.get('success',False), s))

可以完成这项工作

答案 2 :(得分:1)

以下是优雅地完成这项工作的方法:

args = [
    {'id': 19, 'success': True, 'title': u'apple'},
    {'id': 19, 'success': False, 'title': u'some other '},
    {'id': 19, 'success': False, 'title': u'dont know'}
]


count_success = lambda x: 1 if x['success'] else 0

success_list = map(count_success, args)

print(sum(success_list))  # Python 3
print sum(success_list)   # Python 2

显示器:

1

这就像Pythonic一样。