【问题标题】:Conditional operations on a list of dictionaries in PythonPython中字典列表的条件操作
【发布时间】:2018-06-30 13:02:25
【问题描述】:

我想根据另一个键的条件(例如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

【问题讨论】:

    标签: python json list dictionary


    【解决方案1】:

    怎么样?

    >>> sum(d['Age'] for d in list_of_dicts if d['Gender'] == 'male')
    28
    

    在这里,从技术上讲,您在生成器表达式上调用 sum - 过滤到 Gender 等于“男性”的字典。

    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)
    

    【讨论】:

      猜你喜欢
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      • 2016-10-01
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多