使用dicts和过滤器进行Python列表理解

时间:2018-03-14 11:09:19

标签: python list list-comprehension dictionary-comprehension

我有一个像这样的列表:

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]

我如何实现目标?

提前致谢

6 个答案:

答案 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)