web-dev-qa-db-fra.com

Les clés du dictionnaire correspondent sur la liste; obtenir une paire clé/valeur

En python ... j'ai une liste d'éléments 'my_list' et un dictionnaire 'my_dict' où certaines clés correspondent dans 'my_list'.

J'aimerais effectuer une recherche dans le dictionnaire et récupérer des paires clé/valeur pour les clés correspondant aux éléments "my_list". 

J'ai essayé ça ...

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

Mais ça ne fait pas le travail.

16
peixe

(J'ai renommé list en my_list et dict en my_dict pour éviter le conflit avec les noms de type.)

Pour de meilleures performances, vous devez parcourir la liste et vérifier l’appartenance au dictionnaire:

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

Si vous souhaitez créer un nouveau dictionnaire à partir de ces paires clé-valeur, utilisez

new_dict = {k: my_dict[k] for k in my_list if k in my_dict}
31
Sven Marnach

N'utilisez pas dict et list en tant que noms de variables. Ils occultent les fonctions intégrées. En supposant que la liste l et le dictionnaire d:

kv = [(k, d[k]) for k in l if k in d]
13
Felix Kling
 new_dict = dict((k, v) for k, v in dict.iteritems() if k in list)

Tournant la liste dans un ensemble set(list) peut donner une augmentation de vitesse notable

10
Rob Cowie

Essaye ça:

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

Qu'en est-il de print([kv for kv in dict.items() if kv[0] in list])

3
Alexander Gessler

Voici une solution en une ligne pour cela

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