我需要按它們的值組合兩個字典,從而產生一個新鍵,它是具有共享值的鍵串列。我在網上只能找到如何使用相同的鍵添加兩個值或如何簡單地組合兩個字典,所以也許我只是在錯誤的地方搜索。
給出一個想法:
dic1 = {'A': 'B', 'C': 'D'}
dic2 = {'D': 'B', 'E': 'F'}
應該導致:
dic3 = {['A', 'D']: 'B', 'C': 'D', 'E': 'F'}
uj5u.com熱心網友回復:
我不確定您為什么需要這樣的資料結構,您可能可以找到更好的解決方案。但是,只是為了回答您的問題,這里有一個可能的解決方案:
dic1 = {'A':'B', 'C':'D'}
dic2 = {'D':'B', 'E':'F'}
key_list = list(dic2.keys())
val_list = list(dic2.values())
r = {}
for k,v in dic1.items():
if v in val_list:
i = val_list.index(v) #get index at value
k2 = key_list[i] #use index to retrive the key at value
r[(k, k2)] = v #make the dict entry
else:
r[k] = v
val_list = list(r.values()) #get all the values already processed
for k,v in dic2.items():
if v not in val_list: #if missing value
r[k] = v #add new entry
print(r)
輸出:
{('A', 'D'): 'B', 'C': 'D', 'E': 'F'}
您不能將串列指定為 python 字典中的鍵,因為鍵必須是可散列的,并且串列不是可灰化的物件,因此我使用了元組。
uj5u.com熱心網友回復:
我會使用一個defaultdict串列并構建一個反轉的字典,最后在將串列轉換為元組時反轉它(因為串列不可散列并且不能用作字典鍵):
from collections import defaultdict
dic1 = {'A':'B', 'C':'D'}
dic2 = {'D':'B', 'E':'F'}
temp = defaultdict(list)
for d in (dic1, dic2):
for key, value in d.items():
temp[value].append(key)
print(temp)
res = {}
for key, value in temp.items():
if len(value) == 1:
res[value[0]] = key
else:
res[tuple(value)] = key
print(res)
此列印輸出(顯示 的中間步驟temp)是:
defaultdict(<class 'list'>, {'B': ['A', 'D'], 'D': ['C'], 'F': ['E']})
{('A', 'D'): 'B', 'C': 'D', 'E': 'F'}
如果您愿意將 1 元素元組作為鍵進行妥協,那么第二部分將變得更加簡單:
res = {tuple(value): key for key, value in temp.items()}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/410039.html
標籤:
上一篇:按字典值對字典的嵌套串列進行排序
