我有一个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'
答案 0 :(得分:5)
使用sum(li)
,您尝试将字典键添加到sum
提供的默认int 0起始值;字典会在迭代时自然提供密钥。
您可以在比较中对bool值应用sum,对True
或False
很容易强制为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将分配给原始数据结构中匹配的每个元素