我有一个像这样的列表:
l1 = [{'id':'78798798','gender':'Male'},
{'id':'78722228','gender':'Female'},
{'id':'33338','gender':'Male'}]
我需要检查使用列表推导获得的列表的长度,并按“性别”进行过滤。 我试试
len([x for x in l1 if x['gender'] == "Male"])
但返回错误 然后我尝试:
[[(k,v) for k,v in d.items()] for d in l1 if l1['gender'] == 'Male']
但返回相同的错误
[[(k,v) for k,v in d.items() if k['gender'] == 'Male'] for d in l1]
我如何实现目标?
提前致谢
答案 0 :(得分:2)
显然,列表中的一个词典没有gender
键。你可以通过在列表理解中添加一个额外的部分来摆脱这种情况
len([x for x in l1 if "gender" in x and x['gender'] == "Male"])
答案 1 :(得分:1)
可能其中一个条目缺少性别字段。尝试
print([x for x in l1 if 'gender' not in x])
找到它。
答案 2 :(得分:0)
快速解决方案:
print(len([x for x in l1 if x['gender'] == "Male"]))
它查找列表l1
中的元素,并检查值是否等于"男性"。
答案 3 :(得分:0)
试试这个
l =[{'id':'78798798','gender':'Male'},
{'id':'78722228','gender':'Female'},
{'id':'33338','gender':'Male'}]
len(filter(lambda x: x['gender']=='Male', l))
答案 4 :(得分:0)
你可以尝试这样一行:
print(len(list(filter(lambda x:x['gender']=='Male',l1))))
输出:
2
答案 5 :(得分:0)
您可以使用 value "mat_a (Mat 1 2 3 4)"
:
sum
输出:
l1 = [{'id':'78798798','gender':'Male'},
{'id':'78722228','gender':'Female'},
{'id':'33338','gender':'Male'}]
result = sum(i['gender'] == 'Male' for i in l1)
print(result)