這個問題在這里已經有了答案: 用串列值反轉字典 5 個答案 2天前關閉。
我有一本字典:
dict = {'A':[1,2,5],'B':[3,6,13],'C':[2,3,6],'D':[4,6,8]}
我想將所有常見元素作為鍵提取到一個新字典中,并將它們的對應值作為dict從中提取它們的鍵。我想要的是:
newdict = {1:['A'],2:['A','C'],3:['B','C'],4:['D'],5:['A'],6:['B','C','D'],8:['D'],13:['B']} .
我試圖通過復制字典dict并比較每個元素(dict1是副本dict)來比較每個元素的值:
for i, j in zip(range(len(dict)), range(len(dict1))):
for m, n in zip(range(len(dict[i])), range(len(dict1[j]))):
if dict[i][m] == dict1[j][n]:
print(dict[i][m])
for i in range(len(dict)):
for k in range(len(dict[i])):
#print(dict[i][k])
for j in range(dict[i 1][k], len(g)):
#print(j)
if dict[i][k] == dict[i 1][j]:
print(dict[i][k])
但是,即使在能夠提取常見的重復值之前,我也會遇到索引超出范圍錯誤或無法獲取正確的鍵。有人知道怎么做這個嗎?
uj5u.com熱心網友回復:
使用簡單的解決方案defaultdict(減少臃腫的代碼)
from collections import defaultdict
d2 = defaultdict(list)
for k,v in d.items():
for number in v:
d2[number].append(k)
>>> print(d2)
defaultdict(list,
{1: ['A'],
2: ['A', 'C'],
3: ['B', 'C'],
4: ['D'],
5: ['A'],
6: ['B', 'C', 'D'],
8: ['D'],
13: ['B']})
您也可以使用普通字典,只需添加一些檢查:
d2 = {}
for k,v in d.items():
for number in v:
if number in d2:
d2[number].append(k)
else:
d2[number] = [k]
最后,避免命名您的字典dict,因為它會覆寫內置dict名稱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/488123.html
標籤:Python python-3.x 字典
