dict列表就像。
[{'id': 19, 'success': True, 'title': u'apple'},
{'id': 19, 'success': False, 'title': u'some other '},
{'id': 19, 'success': False, 'title': u'dont know'}]
我想要计算success
为True
的dict有多少。
我试过了,
len(filter(lambda x: x, [i['success'] for i in s]))
如何使用pythonic方式使其更优雅?
答案 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一样。