嗨我有两本字典如下
{'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个键/值对.所以需要花费很多时间.最快的方法是什么?
这个
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)