Сопоставить элементы списка со значениями словаря - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть словари внутри списка как: -

L= [{'id': 3, 'term': 'bugatti', 'bucket_id': 'ad_3'},
     {'id': 4, 'term': 'mercedez', 'bucket_id': 'ad_4'},
     {'id': 8, 'term': 'entertainment', 'bucket_id': 'ad_8'},
     {'id': 8, 'term': 'entertainment', 'bucket_id': 'ad_8'},
     {'id': 9, 'term': 'music', 'bucket_id': 'ad_9'}]

, а другой список как: -

words=['bugatti', 'entertainment', 'music','politics'] 

Все, что я хочу отобразить элементы списка words с ключом term и хочет получить соответствующий словарь.Ожидаемый результат:

new_list= [{'id': 3, 'term': 'bugatti', 'bucket_id': 'ad_3'},
           {'id': 8, 'term': 'entertainment', 'bucket_id': 'ad_8'},
           {'id': 8, 'term': 'entertainment', 'bucket_id': 'ad_8'},
           {'id': 9, 'term': 'music', 'bucket_id': 'ad_9'}]

То, что я пробовал как:

for d in L:
    for k,v in d.items():
        for w in words:
            if v==w:
                print (k,v)

, дает мне только:

term bugatti
term entertainment
term entertainemnt
term music

Ответы [ 4 ]

0 голосов
/ 20 сентября 2018
print [dict for dict in L if dict["term"] in words]
0 голосов
/ 20 сентября 2018

Проблема в том, что вы печатаете (k,v), который является просто ключом и значением одной словарной записи.Если вы хотите иметь весь словарь, вы должны поместить весь словарь в инструкцию для печати. ​​

for d in L:
    for k,v in d.items():
        for w in words:
            if v==w:
                print (d)
0 голосов
/ 20 сентября 2018

Вы можете использовать понимание списка, но я включил полный цикл, чтобы вы могли видеть логику более четко

new_l = [i for i in l if i['term'] in words]

Полный цикл

new_l = []
for i in l:
    if i['term'] in words:
        new_l.append(i)
0 голосов
/ 20 сентября 2018

Использование списка понимания.

Пример:

L= [{'id': 3, 'term': 'bugatti', 'bucket_id': 'ad_3'},
     {'id': 4, 'term': 'mercedez', 'bucket_id': 'ad_4'},
     {'id': 8, 'term': 'entertainment', 'bucket_id': 'ad_8'},
     {'id': 8, 'term': 'entertainment', 'bucket_id': 'ad_8'},
     {'id': 9, 'term': 'music', 'bucket_id': 'ad_9'}]


words=['bugatti', 'entertainment', 'music','politics']

print([i for i in L if i["term"] in words])

Выход:

[{'bucket_id': 'ad_3', 'id': 3, 'term': 'bugatti'},
 {'bucket_id': 'ad_8', 'id': 8, 'term': 'entertainment'},
 {'bucket_id': 'ad_8', 'id': 8, 'term': 'entertainment'},
 {'bucket_id': 'ad_9', 'id': 9, 'term': 'music'}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...