根据该字典中某个键的特定值过滤字典列表

时间:2018-09-12 01:55:45

标签: python list dictionary

我有一个如下的词典列表

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的新列表字典

2 个答案:

答案 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]