Ключи словаря совпадают в списке; получить пару ключ / значение - PullRequest
17 голосов
/ 28 июня 2011

В python ... У меня есть список элементов 'my_list' и словарь 'my_dict', где некоторые ключи совпадают в 'my_list'.

Я хотел бы найти в словаре и получить пары ключ / значение для ключей, соответствующих элементам 'my_list'.

Я пробовал это ...

    if any(x in my_dict for x in my_list):
          print set(my_list)&set(my_dict)

Но это не делает работу.

Ответы [ 6 ]

34 голосов
/ 28 июня 2011

(я переименовал list в my_list и dict в my_dict, чтобы избежать конфликта с именами типов.)

Для повышения производительности следует выполнить перебор списка и проверить наличиечленство в словаре:

for k in my_list:
    if k in my_dict:
        print k, my_dict[k]

Если вы хотите создать новый словарь из этих пар ключ-значение, используйте

new_dict = {k: my_dict[k] for k in my_list if k in my_dict}
15 голосов
/ 28 июня 2011

Не используйте dict и list в качестве имен переменных. Они скрывают встроенные функции. Предполагая список l и словарь d:

kv = [(k, d[k]) for k in l if k in d]
11 голосов
/ 28 июня 2011
 new_dict = dict((k, v) for k, v in dict.iteritems() if k in list)

Превращение списка в набор set(list) может дать заметное увеличение скорости

3 голосов
/ 21 августа 2016

Попробуйте:

mydict = {'one': 1, 'two': 2, 'three': 3}
mykeys = ['three', 'one','ten']
newList={k:mydict[k] for k in mykeys if k in mydict}
print newList
{'three': 3, 'one': 1}
3 голосов
/ 28 июня 2011

Как насчет print([kv for kv in dict.items() if kv[0] in list])

0 голосов
/ 12 октября 2017

Вот решение для одной строки для этого

{i:my_dict[i] for i in set(my_dict.keys()).intersection(set(my_list))}
...