首页 > 解决方案 > 需要在python中以不同格式从现有字典创建新字典

问题描述

我原来的字典是dict1。

dict1={'Input.txt':'Randy','Code.py':'Stan','Output.txt':'Randy'}

我需要如下输出

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

标签: pythonpython-3.x

解决方案


整洁的 Python 技能:

dict1 = {'Input.txt':'Randy','Code.py':'Stan','Output.txt':'Randy'}
out = {}
for k, v in dict1.items():
    out.setdefault(v, []).append(k)

给出预期:

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

.items()因此,我们通过解包从字典方法返回的元组来同步迭代键、值对。对于每一对,我们将值(即'Randy', 'Stan', 'Randy')设置为输出字典中新列表的键(如果那里还没有列表)——这可以通过该setdefault方法巧妙地完成。

因为 from 的返回值setdefault要么是我们刚刚创建的新列表,要么是已经填充的列表(在对的情况下'Output.txt'),而且列表是可变的(对它们的更改会影响对它们的所有引用),我们可以只附加我们的键 ( 'Input.txt', 'Code.py', 'Output.txt') 直接返回任何返回的内容,无论是新的还是旧的。


推荐阅读