簡體   English   中英

合並兩個字典並用Python中的值替換鍵

[英]Combine two dictionaries and replace keys with values in Python

我正在嘗試合並兩個列表並將鍵替換為其他字典的值,請參見下文:

輸入:

d1 = {'22': ['Jane','test'], '33': ['Tom','Hary','Jonas'], '44': ['John']}
d2 = {'22': ['K:Lilly', 'K:Jake'], '33' : ['A:Janet','Brian'], '44': ['Tim','Brian']}

預計 Output:

{
 'K:Lilly': ['Jane', 'test'], 
 'K:Jake': ['Jane', 'test'], 
 'A:Janet': ['Tom', 'Hary', 'Jonas'], 
 'Brian': ['Tom', 'Hary', 'Jonas','John'], 
 'Tim': ['John']
}

我嘗試了類似的方法但沒有成功: Find matching keys in dictionaries & replace keys with values

您可以嘗試使用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)

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

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)

從您預期的 output 來看,您似乎只想將 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']}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM