组合两个字典并用Python中的值替换键

组合两个字典并用Python中的值替换键,python,python-3.x,list,dictionary,Python,Python 3.x,List,Dictionary,我正在尝试合并两个列表,并用其他字典的值替换键,请参见以下内容: 输入: 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': [

我正在尝试合并两个列表,并用其他字典的值替换键,请参见以下内容:

输入:

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']}

您可以尝试使用
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']}
输出={}
对于d1.items()中的k1和v1:
v2=d2.get(k1)
如果(v2!=无):#如果d2中不存在密钥,请格外小心
对于v2中的i:
如果(i)在输出中:
输出[i].extend(v1)#键已存在,只需扩展
其他:
输出[i]=v1.copy()#小心复制
打印(输出)
试试像这样的东西

d1={'22':['Jane','test'],'33':['Tom','Hary','Jonas'],'44':['John']}
d2={'22':['K:Lilly','K:Jake'],'33':['A:Janet','Brian'],'44':['Tim','Brian']}
输出={}
对于d1.items()中的k1和v1:
v2=d2.get(k1)
如果(v2!=无):#如果d2中不存在密钥,请格外小心
对于v2中的i:
如果(i)在输出中:
输出[i].extend(v1)#键已存在,只需扩展
其他:
输出[i]=v1.copy()#小心复制
打印(输出)

从预期的输出来看,似乎只希望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']}

从预期的输出来看,似乎只希望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']}

不为键
Brian
提供所需输出。不为键
Brian
提供所需输出。