Python中对字典列表进行条件操作

3
我希望能够根据另一个键的条件(例如Gender == 'male')对此字典列表中所有人的年龄进行求和:
list_of_dicts= [  
              {"Name": "Ethan", "Gender": "male", "Age": 11},
              {"Name": "Nathan", "Gender": "male", "Age": 6},
              {"Name": "Sophie", "Gender": "female", "Age": 14},
              {"Name": "Patrick", "Gender": "male", "Age": 11}
]

以下代码可以完成此操作,但我想知道是否有更具Python特色/紧凑的方法?也许像列表字典的SQL查询一样的东西?
total_male_age = 0

for dict in list_of_dicts: 
    if dict.get("Gender") == "male":
        total_male_age = total_male_age + dict.get("Age")  


#total_male_age  = 28
1个回答

5
这怎么样?
>>> sum(d['Age'] for d in list_of_dicts if d['Gender'] == 'male')
28

在这里,你在技术上调用了一个生成器表达式——它过滤掉了字典中“Gender”等于“male”的部分,并调用了“sum”。 PEP 289提供了一些进一步阅读的例子。
要查找一个乘积而不是一个总和:
import numpy as np
np.product([d['Age'] for d in list_of_dicts if d['Gender'] == 'male'])

如果您想在Python标准库中查找产品:

from functools import reduce
from operator import mul
reduce(mul, (d['Age'] for d in list_of_dicts if d['Gender'] == 'male'), 1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接