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

Shi*_*ndi 2 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'}] 
Run Code Online (Sandbox Code Playgroud)

我想使用状态键计算这里的工作项

我尝试使用for循环,这工作正常:

print "total",len(d)
wcount = 0

for i in d:
  if i['status'] == "Working":
    wcount += 1


print "working count",wcount
Run Code Online (Sandbox Code Playgroud)

但是我通过使用列表理解在这里遗漏了一些东西:

count = [sum(li) for li in d if li['status'] == 'Working']
print count
Run Code Online (Sandbox Code Playgroud)

错误:

count = [sum(li) for li in d if li['status'] == 'Working']
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Run Code Online (Sandbox Code Playgroud)

Mos*_*oye 5

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

您可以在比较中对bool值应用sum,这可以很容易地强制为1 True或0 False:

count = sum(li['status'] == 'Working' for li in d)
Run Code Online (Sandbox Code Playgroud)