在python中合并两个字典

aki*_*ira 2 python dictionary

嗨我有两本字典如下

{'abc':1,'xyz':8,'pqr':9,'ddd': 22}
{0:'pqr',1:'xyz',2:'abc',3:'ddd'}
Run Code Online (Sandbox Code Playgroud)

我的目标是以下列格式获取新词典

{2:1 1:8 0:9 3:22}
Run Code Online (Sandbox Code Playgroud)

我正在梳理第一个字典的值作为新字典的值和字典2的键,其值与字典1的键匹配作为新字典的键.

我写了一些代码如下:

for list1elem in listofemail[1:]:
    print(list1elem)
    for the_key, the_value in list1elem.items():
        the_key = [k for k, v in vocab_dic.items() if v == the_key]
Run Code Online (Sandbox Code Playgroud)

但是我的代码并没有用新的密钥替换旧密钥.我的两个字典都很大,包含25000个键/值对.所以需要花费很多时间.最快的方法是什么?

Pyn*_*hia 6

这个

d1 = {'abc':1, 'xyz':8, 'pqr':9, 'ddd':22}
d2 = {0:'pqr', 1:'xyz', 2:'abc', 3:'ddd'}

d = {k:d1[v] for k,v in d2.items()}
Run Code Online (Sandbox Code Playgroud)

产生

{0: 9, 1: 8, 2: 1, 3: 22}
Run Code Online (Sandbox Code Playgroud)

基本上,它遍历每个项目(键和值),d2并使用值v作为键d1来获取其对应的值.然后它将后者与原始键组合k以创建进入结果字典的项目.

附注:没有错误检查.它假定值d2in d1作为键存在.

如果你想要一个特定的值,如果缺少密钥(例如-1),你可以这样做

d = {k:d1.get(v, -1) for k,v in d2.items()}
Run Code Online (Sandbox Code Playgroud)

否则,如果您想省略完全插入项目,请使用

d = {k:d1[v] for k,v in d2.items() if v in d1}
Run Code Online (Sandbox Code Playgroud)