python - 使用列表理解对嵌套在列表内的字典进行操作

标签 python

我有一个字典列表,每个字典都有一个 data 键。每个数据键都包含关于一个人的一堆属性,这些属性都不是强制性的:

persons = [
    {"Name": "John", "data": {"Age": 23, "Gender": "Male"}},
    {"Name": "Jane", "data": {"Age": 22, "Gender": "Female"}},
    {"Name": "Harry", "data": {"Age": 22}},
    {"Name": "Hermione", "data": {"Gender": "Female"}},
]

我想要做的是提取年龄值的不同列表。我是这样做的:

ages = set()
persondatas = [person['data'] for person in persons]
for persondata in persondatas:
    if 'Age' in persondata:
        ages.add(persondata['Age'])
ages

返回:

{22, 23}

这正是我想要的,但我认为一定有一种比循环使用列表理解获得的列表更好、更简洁的方法。我可以在列表理解中完成所需的工作吗?我的第一次失败的尝试是这样的: [l 中的人['数据']['年龄'] 失败了:

KeyError: 'Age'

肯定有更好的方法,但我折腾了却没能解决。有人可以帮忙吗?

最佳答案

您可以在列表理解中添加一个条件 - 用一个循环淘汰这两个操作。

>>> {person['data']['Age'] for person in persons if 'Age' in person['data']}
set([22, 23])

请注意我如何使用大括号 ({}) 而不是方括号 ([]) 来表示 set comprehension .

关于python - 使用列表理解对嵌套在列表内的字典进行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48440801/

相关文章:

Python:检测图像中的矩形边缘并将其裁剪成正方形?

python - OpenSimplex 问题

python - python 中的“没有名为 spacy 的模块”,但在常规 python 解释器中工作正常

python - 一点数学和逻辑

python - 在 Python (Matplotlib) 中重用模块引用

python - 如何检索给定值的 pyodbc 行

python - 使用 fnmatch 查找具有名称模式的所有文件夹

python - 在 Dreamhost 上调试 Django/Python

python - 将 .htm 或 .html 扩展名与 python RE 匹配

php - 如何有效地将两个(或更多)关联数组与公共(public)键组合起来