如何使用 python dict 切换值和键?

我的输入是:


files = {

    'Input.txt': 'Randy',

    'Code.py': 'Stan',

    'Output.txt': 'Randy'

我希望输出为:


{'Randy':['Input.txt','Output.txt'], 'Stan':['Code.py']}

基本上它是列表字典中此开关键和值的另一个方向


这是我尝试过的:


dictresult= {}

for key,value in files.items():

     dictresult[key]=value

     dictresult[value].append(key)

但它不起作用。我明白了KeyError: 'Randy'


慕妹3146593
浏览 160回答 3
3回答

蝴蝶不菲

这是一个简单的方法,我们在迭代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']}

天涯尽头无女友

您的代码存在一些问题。我们来复习:首先,您收到键错误,因为您试图将一个值附加到不存在的键。为什么?因为在您之前的声明中,您向 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() 那样返回键值对如果键在那里,我们只需将当前值附加到它。在其他情况下,如果该键不存在,我们向字典添加一个新键,但我们通过将其转换为列表来实现,否则字符串将作为值插入,而不是列表,您将无法附加到它。

守着一只汪

尝试使用defaultdict -from collections import defaultdictdictresult= defaultdict(list)for key,value in files.items():     dictresult[value].append(key)这将假设字典中的每个项目都有一个空列表,因此附加不会失败
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python