2017-06-01 54 views
2

我有兩本字典,我需要刪除詞典1不中詞典2.出現這種情況的關鍵是我的嘗試:Python的去除不單獨的字典發生字典鍵

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) 

打印:

{'id1': 1, 'id2': 1, 'id3': 1} 

我的問題是:這是最快/最有效的方法來做到這一點?或者它構建套,這將需要長達做這樣的事情

我的第2次嘗試比需要更多的內存:

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

你的第二次嘗試將是我個人的最愛。 –

+0

爲什麼你不使用['timeit'](https://docs.python.org/2/library/timeit.html)來測試你的嘗試? – ozgur

回答

1

過濾器和字典的理解可能是一個很好的方式去爲這樣的任務,雖然如果沒有這個問題,這個問題很容易解決。

​​
0

詞典理解可以有一個大詞典時的性能打擊。你可以刪除它們只是遍歷列表與for循環:

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

,或者如果你知道你的類型的字典將是小,你可以使用字典理解。

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

0

你解決是好事,因爲:最快/內存使用效率最高的問題來自於價值型和尺寸的。 這可以通過python調試器查看和設置。