2016-11-17 61 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