如何用列表推导式处理嵌套字典列表并提取去重年龄值?
提取字典列表中Age的去重集合(简洁实现)
嘿,这个需求完全可以用集合推导式一步搞定,既避免了KeyError,又比你原来的写法更简洁!
核心实现代码
直接用带条件判断的集合推导式,一次性生成去重后的Age集合:
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 = {person['data']['Age'] for person in persons if 'Age' in person['data']} print(ages) # 输出 {22, 23}
为什么这个写法可行?
- 集合推导式天生支持去重,不需要额外调用
set()或者循环添加元素 - 末尾的
if 'Age' in person['data']做了前置检查,直接过滤掉没有Age键的data字典,从根源上避免了KeyError
另一种可选写法(用dict.get())
如果你习惯用get()方法处理可选键,也可以这么写(不过不如上面的直观):
ages = {age for person in persons if (age := person['data'].get('Age')) is not None}
这里用了海象运算符:=来临时存储get()的结果,再判断是否为None,同样能得到正确的集合。
内容的提问来源于stack exchange,提问作者jamiet
相关产品推荐
相关产品推荐

