我有一个字典列表,每个字典都有一个 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/