3 回答

TA貢獻1810條經驗 獲得超4個贊
這是一個簡單的方法,我們在迭代keys和values你原來的字典中files,并為每個值追加到它與該值對應的所有密鑰創建列表。
files = {
'Input.txt': 'Randy',
'Code.py': 'Stan',
'Output.txt': 'Randy'
}
dictresult= {}
for k, v in files.items():
if v not in dictresult:
dictresult[v] = [k]
else:
dictresult[v].append(k)
print(dictresult) # -> {'Randy': ['Output.txt', 'Input.txt'], 'Stan': ['Code.py']}

TA貢獻1831條經驗 獲得超9個贊
您的代碼存在一些問題。
我們來復習:
首先,您收到鍵錯誤,因為您試圖將一個值附加到不存在的鍵。為什么?因為在您之前的聲明中,您向 dict[key] 添加了一個值,現在您正在嘗試訪問/附加 dict[value]。
dictresult[key]=value
您正在為新生成的密鑰分配值,無需任何檢查。每個新值都會覆蓋它。
dictresult[value].append(key)
然后,您嘗試使用錯誤的鍵將新值附加到字符串。
您可以通過以下代碼實現您想要的:
d = {}
for key,value in files.items():
if value in d:
d[value].append(key)
else:
d[value] = [key]
print(d)
它將輸出:
{'Randy': ['Input.txt', 'Output.txt'], 'Stan': ['Code.py']}
它如何/為什么起作用?
我們來復習:
if 條件檢查該鍵是否已存在于字典中。當遍歷一個字典時,它只返回它的鍵,而不像 dict.items() 那樣返回鍵值對
如果鍵在那里,我們只需將當前值附加到它。
在其他情況下,如果該鍵不存在,我們向字典添加一個新鍵,但我們通過將其轉換為列表來實現,否則字符串將作為值插入,而不是列表,您將無法附加到它。

TA貢獻1872條經驗 獲得超4個贊
嘗試使用defaultdict -
from collections import defaultdict
dictresult= defaultdict(list)
for key,value in files.items():
dictresult[value].append(key)
這將假設字典中的每個項目都有一個空列表,因此附加不會失敗
添加回答
舉報