Python 在列表理解中发出以获取计数

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

我有一份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 "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