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)
这将假设字典中的每个项目都有一个空列表,因此附加不会失败
添加回答
举报