我想根据另一个键(例如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}
]
以下代码完成了此操作,但我想知道是否还有其他Pythonic / compact方式可以做到这一点?也许像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
最佳答案
这个怎么样?
>>> sum(d['Age'] for d in list_of_dicts if d['Gender'] == 'male')
28
在这里,您从技术上讲是在生成器表达式上调用
sum
,该表达式可过滤到Gender
等于“ male”的字典。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)