2016-11-17 59 views
0

的價值我有2點字典:創建使用該密鑰從兩個字典詞典從一個與其他

d1 = {'a':'python','b':'java','c':'c++','d':'js',........} 
d2 = {'1':'a','2':'b','4':'d','3':'c',........} 

我需要新的字典同時使用,第二個字典值應重點新字典的和第一字典值應該是新的字典詞典的價值,如:

result = {'1':'python','2':'java','3':'c++','4':'js',........} 

我嘗試做這樣的:

d2_rev = {j:i for i,j in d2.items()} 
result = {i:d2_rev[i] for i,j in d2_rev } 

我得到正確的輸出接受我有非常大的字典和執行需要更多的時間。有什麼我可以做的,以提高這個代碼的速度?

回答

6

我不知道爲什麼你要創建一個額外的(交換)的字典,你可以只使用:

result = {i: d1[j] for i, j in d2.items()} 

並沒有創造額外的dict減少內存和速度。一個字典的價值是另一個的關鍵,直接得到它。

除此之外;我不認爲,單單在Python中,你就能夠獲得更好的結果。

+0

感謝@Jim Fasarakis - 希利亞德,它爲我工作。 –

1
d1 = {'a':'python','b':'java','c':'c++','d':'js',........} 
d2 = {'1':'a','2':'b','4':'d','3':'c',........} 
result = {} 
for k in d2: 
    result[k] = d1[d2[k]] 


>>> result 
{'1':'python','2':'java','4':'js','3':'c++',........} 
2

如果key不在您的d1字典中,最好使用dict.get(key)而不是dict[key]。在這種情況下,dict.get(key)將返回None。然後,您可以使用dict理解存儲結果,如Jim's answer中所述。因此,你的表達應該是:

result = {i: d1.get(j) for i, j in d2.items()} 

樣品例如:

>>> d1 = {'a':'python','b':'java','c':'c++'} 
>>> d2 = {'1':'a','2':'b','4':'d'} 
#       ^'d' key is not present in d1 
>>> result = {i: d1.get(j) for i, j in d2.items()} 
>>> result 
{'1': 'python', '2': 'java', '4': None} 
#       ^result holds `None` value