it-swarm.com.de

Wörterbuchschlüssel stimmen mit der Liste überein; Schlüssel/Wert-Paar erhalten

In Python ... habe ich eine Liste der Elemente 'my_list' und ein Wörterbuch 'my_dict', in dem einige Schlüssel in 'my_list' übereinstimmen.

Ich möchte das Wörterbuch durchsuchen und Schlüssel/Wert-Paare für die Schlüssel abrufen, die mit den 'my_list'-Elementen übereinstimmen. 

Ich habe das versucht ...

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

Aber es macht nicht den Job.

16
peixe

(Ich habe list in my_list und dict in my_dict umbenannt, um den Konflikt mit den Typnamen zu vermeiden.)

Um eine bessere Leistung zu erzielen, sollten Sie die Liste durchlaufen und die Mitgliedschaft im Wörterbuch überprüfen:

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

Wenn Sie aus diesen Schlüsselwertpaaren ein neues Wörterbuch erstellen möchten, verwenden Sie

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

Verwenden Sie nicht dict und list als Variablennamen. Sie beschatten die eingebauten Funktionen. Angenommen Liste l und Wörterbuch 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)

Das Verwandeln der Liste in einen Satz set(list) kann führt zu einer spürbaren Geschwindigkeitssteigerung

10
Rob Cowie

Versuche dies:

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}

Was ist mit print([kv for kv in dict.items() if kv[0] in list])

3

Hier ist eine einzeilige Lösung dafür

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