列表理解中的问题以获得计数

时间:2017-02-17 14:09:43

标签: 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循环尝试了这个,这很好用:

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'

3 个答案:

答案 0 :(得分:5)

使用sum(li),您尝试将字典键添加到sum提供的默认int 0起始值;字典会在迭代时自然提供密钥。

您可以在比较中对bool值应用sum,对TrueFalse很容易强制为1:

count = sum(li['status'] == 'Working' for li in d)

答案 1 :(得分:2)

一个班轮。

>>> sum(1 for dictionary in dictionaries if dictionary['status'] == 'Working')
4

冷却reduce替代品(一次通过)。

>>> print reduce(lambda count, dictionary: count + (dictionary['status'] == 'Working'), dictionaries, 0)
4

答案 2 :(得分:1)

大致相当于下面的循环:

count = sum([1 for li in d if li['status'] == 'Working'])

您收到上述错误,因为li将分配给原始数据结构中匹配的每个元素