Python 在列表理解中发出以获取计数
我有一份dict列表,如下所示:Python 在列表理解中发出以获取计数,python,dictionary,Python,Dictionary,我有一份dict列表,如下所示: d = [{'status': u'Working', 'name': u'AR000001'}, {'status': u'Working', 'name': u'AR000002'}, {'status': u'Working', 'name': u'AR000003'},{'status': u'Working', 'name': u'AR000013'}] 我想使用状态键计算这里的工作项 我使用for loop尝试了这个方法,效果很好: print
d = [{'status': u'Working', 'name': u'AR000001'}, {'status': u'Working', 'name': u'AR000002'}, {'status': u'Working', 'name': u'AR000003'},{'status': u'Working', 'name': u'AR000013'}]
我想使用状态键计算这里的工作项
我使用for loop尝试了这个方法,效果很好:
print "total",len(d)
wcount = 0
for i in d:
if i['status'] == "Working":
wcount += 1
print "working count",wcount
但我用列表理解法遗漏了一些东西:
count = [sum(li) for li in d if li['status'] == 'Working']
print count
错误:
count = [sum(li) for li in d if li['status'] == 'Working']
TypeError: unsupported operand type(s) for +: 'int' and 'str'
使用sum(li)
,您试图将字典键添加到sum
提供的默认int 0起始值;字典在迭代时自然会提供它们的键
您可以对比较中的bool值应用sum,对于True
很容易强制为1,对于False
则强制为0:
count = sum(li['status'] == 'Working' for li in d)
大致相当于下面的循环:
count = sum([1 for li in d if li['status'] == 'Working'])
由于li将被分配给原始数据结构中匹配的每个元素,因此会出现上述错误
>>> sum(1 for dictionary in dictionaries if dictionary['status'] == 'Working')
4
冷却reduce
备选方案(一次通过)
哦…简单的清单。谢谢,我参加了很多复杂的活动。几个小时后我会接受答案的。再次感谢好的解决方案m8。
>>> print reduce(lambda count, dictionary: count + (dictionary['status'] == 'Working'), dictionaries, 0)
4