我有一个如下的词典列表
dict = {2308:[{'name':'john'},{'age':'24'},{'employed':'yes'}],3452:[{'name':'sam'},{'age':'45'},{'employed':'yes'}],1234:[{'name':'victor'},{'age':'72'},{'employed':'no'}]}
我想将上述字典过滤掉,并将其命名为年龄超过30岁的新字典new_dict。
我尝试了以下方法。我刚接触编程时,无法理解逻辑。
new_dict =[var for var in dict if dict['age']>30]
但是我知道这是字典列表,所以有什么办法可以获取年龄> 30的新列表字典
答案 0 :(得分:1)
您可以使用以下dict理解(假设将字典存储在变量d
中而不是dict
中,这将隐藏内置的dict
类):
{k: v for k, v in d.items() if any(int(s.get('age', 0)) > 30 for s in v)}
这将返回:
{3452: [{'name': 'sam'}, {'age': '45'}, {'employed': 'yes'}], 1234: [{'name': 'victor'}, {'age': '72'}, {'employed': 'no'}]}
答案 1 :(得分:0)
解决方案
people = {
2308:[
{'name':'john'},{'age':'24'},{'employed':'yes'}
],
3452:[
{'name':'sam'},{'age':'45'},{'employed':'yes'}
],
1234:[
{'name':'victor'},{'age':'72'},{'employed':'no'}
]
}
people_over_30 = {}
for k, v in people.items():
for i in range(len(v)):
if int(v[i].get('age', 0)) > 30:
people_over_30[k] = [v]
print(people_over_30)
输出
(xenial)vash@localhost:~/python$ python3.7 quote.py {3452: [[{'name': 'sam'}, {'age': '45'}, {'employed': 'yes'}]], 1234: [[{'name': 'victor'}, {'age': '72'}, {'employed': 'no'}]]}
评论
除非这是特定代码的理想结构,否则建议重新格式化字典,使其看起来像这样
people = {
2308:
{'name':'john','age':'24','employed':'yes'}
,
3452:
{'name':'sam','age':'45','employed':'yes'}
,
1234:
{'name':'victor','age':'72','employed':'no'}
}
然后您的工作将变得更加简单,并且可以使用它来处理
for k, v in people.items():
if int(v.get('age', 0)) > 30:
people_over_30[k] = [v]