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.
(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}
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]
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
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}
Qu'en est-il de print([kv for kv in dict.items() if kv[0] in list])
Voici une solution en une ligne pour cela
{i:my_dict[i] for i in set(my_dict.keys()).intersection(set(my_list))}