我正在尝试组合两个列表并将键替换为其他字典的值,见下文:
输入:
d1 = {'22': ['Jane','test'], '33': ['Tom','Hary','Jonas'], '44': ['John']}
d2 = {'22': ['K:Lilly', 'K:Jake'], '33' : ['A:Janet','Brian'], '44': ['Tim','Brian']}
预期输出:
{
'K:Lilly': ['Jane', 'test'],
'K:Jake': ['Jane', 'test'],
'A:Janet': ['Tom', 'Hary', 'Jonas'],
'Brian': ['Tom', 'Hary', 'Jonas','John'],
'Tim': ['John']
}
我尝试过类似的方法,但没有成功:在字典中查找匹配的键;将键替换为值
您可以尝试使用dict.setdefault
:
d3 = {}
for k, v in d2.items():
for k2 in v:
if k in d1:
d3.setdefault(k2, []).extend(d1[k])
print(d3)
输出:
{'K:Lilly': ['Jane', 'test'],
'K:Jake': ['Jane', 'test'],
'A:Janet': ['Tom', 'Hary', 'Jonas'],
'Brian': ['Tom', 'Hary', 'Jonas', 'John'],
'Tim': ['John']}
试试
d1 = {'22': ['Jane','test'], '33': ['Tom','Hary','Jonas'], '44': ['John']}
d2 = {'22': ['K:Lilly', 'K:Jake'], '33' : ['A:Janet','Brian'], '44': ['Tim','Brian']}
output = {}
for k1, v1 in d1.items():
v2 = d2.get(k1)
if(v2 != None): # extra caution if the key does not exist in d2
for i in v2:
if(i in output):
output[i].extend(v1) # key already exist, just extend
else:
output[i] = v1.copy() # careful to make a copy
print(output)
{'K:Lilly': ['Jane', 'test'],
'K:Jake': ['Jane', 'test'],
'A:Janet': ['Tom', 'Hary', 'Jonas'],
'Brian': ['Tom', 'Hary', 'Jonas', 'John'],
'Tim': ['John']}
d1 = {'22': ['Jane','test'], '33': ['Tom','Hary','Jonas'], '44': ['John']}
d2 = {'22': ['K:Lilly', 'K:Jake'], '33' : ['A:Janet','Brian'], '44': ['Tim','Brian']}
newDict = {}
for key2 in d2:
values = d1[key2]
for val2 in d2[key2]:
newDict[val2] = d1[key2].copy()
print(newDict)
从预期的输出来看,似乎您只希望d2的名称(值)作为结果中的键,并将d1的相应值作为这些名称的值。这可以通过嵌套的字典推导式获得:
d1 = {'22': ['Jane','test'], '33': ['Tom','Hary','Jonas'], '44': ['John']}
d2 = {'22': ['K:Lilly', 'K:Jake'], '33' : ['A:Janet','Brian'], '44': ['Tim','Brian']}
d3 = { name:d1[key] for key,names in d2.items() for name in names }
print(d3)
{'K:Lilly': ['Jane', 'test'], 'K:Jake': ['Jane', 'test'],
'A:Janet': ['Tom', 'Hary', 'Jonas'], 'Brian': ['John'],
'Tim': ['John']}