фильтровать список словарей по определенному значению ключа в этом словаре - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть следующий список словарей

dict = {2308:[{'name':'john'},{'age':'24'},{'employed':'yes'}],3452:[{'name':'sam'},{'age':'45'},{'employed':'yes'}],1234:[{'name':'victor'},{'age':'72'},{'employed':'no'}]}

Я хочу отфильтровать приведенный выше словарь в новый словарь с именем new_dict, возраст которого> 30.

Я попробовал следующее. Поскольку я новичок в программировании, не мог понять логику.

new_dict =[var for var in dict if dict['age']>30]

Но я знаю, что это список словарей, поэтому есть ли способ получить новые списки словарей с возрастом> 30

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Решение

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]
0 голосов
/ 12 сентября 2018

Вы можете использовать следующее понимание dict (при условии, что вы сохраняете словарь в переменной d, а не dict, что будет скрывать встроенный класс dict):

{k: v for k, v in d.items() if any(int(s.get('age', 0)) > 30 for s in v)}

Thisвозвращает:

{3452: [{'name': 'sam'}, {'age': '45'}, {'employed': 'yes'}], 1234: [{'name': 'victor'}, {'age': '72'}, {'employed': 'no'}]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...