2017-06-01 1 views
2

ich zwei Wörterbücher haben, ich brauche die Schlüssel aus Wörterbuch 1 zu entfernen, die im Wörterbuch 2. Diese treten nicht ist mein Versuch:Python Dictionary-Schlüssel entfernen, die in separaten Wörterbuch nicht auftreten

d1 = {'id1':1, 
     'id2':1, 
     'id3':1, 
     'id4':1} 

d2 = {'id1':0, 
     'id2':0, 
     'id3':0, 
     'idnew':0} 

for k in (d1.keys()-d2.keys()): 
    del d1[k] 

print (d1) 

Drucke:

Meine Frage ist: Ist dies der schnellste/speicherfreundlichste Weg, dies zu tun? oder nicht bauen es Sätze, die mehr Speicher benötigen wird als erforderlich, um etwas wie dieses

Mein zweiter Versuch zu tun:

d1 = {k:v for k,v in d1.items() if k in d2} 
+3

Ihr 2. Versuch wäre mein persönlicher Favorit. –

+0

Warum benchmarken Sie Ihre Versuche nicht mit ['timeit'] (https://docs.python.org/2/library/timeit.html)? – ozgur

Antwort

1

Filter und dict Verständnis könnte eine gute Möglichkeit sein, für eine solche Aufgabe zu gehen, obwohl Dieses Problem lässt sich auch ohne Probleme lösen.

filtered_d = {k:d1[k] for k in filter(lambda k: k in d2, d1)} 
0

Dict Verständnis kann eine Leistung getroffen haben, wenn Wörterbücher eine große. Sie können entfernen Sie sie über Liste mit for Schleife nur Iterieren:

for key in set(d1) -set(d2): 
    del d1[key] 

oder wenn Sie wissen, dass Ihr dicts klein sein wird, können Sie dict Verständnis verwenden.

d1 = {k: v for k, v in d1.items() if k in d2}

0

Ihre Lösung ist gut, weil: die schnellsten/die meisten Speicher effizient Probleme kommen aus Art von Werten und Größe. Dies kann mit einem Python-Debugger angezeigt und eingestellt werden.

Verwandte Themen