为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕妹3146593 2022-01-11 17:16:06
我的输入是: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'
查看完整描述

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']}


查看完整回答
反对 回复 2022-01-11
?
天涯尽头无女友

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() 那样返回键值对

如果键在那里,我们只需将当前值附加到它。

在其他情况下,如果该键不存在,我们向字典添加一个新键,但我们通过将其转换为列表来实现,否则字符串将作为值插入,而不是列表,您将无法附加到它。


查看完整回答
反对 回复 2022-01-11
?
守着一只汪

TA贡献1872条经验 获得超4个赞

尝试使用defaultdict -


from collections import defaultdict

dictresult= defaultdict(list)

for key,value in files.items():

     dictresult[value].append(key)

这将假设字典中的每个项目都有一个空列表,因此附加不会失败


查看完整回答
反对 回复 2022-01-11
  • 3 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号