【问题标题】:Replacing a key of a dictionary with a value of another dictionary用另一个字典的值替换字典的键
【发布时间】:2019-11-18 19:38:00
【问题描述】:

我有两本这样的字典

dict_1 = {'adbc.txt':'Text','union.pdf':'pdf', 'file1.py':'Python'}
dict_2 = {'adbc.txt':['a.txt','b.txt','c.txt'], 'file1.py':['test.py', 'modified.py']}

我需要在 Python 中获得以下结果。有人可以帮忙吗

result = {'a.txt':'Text','b.txt':'Text','c.txt':'Text','test.py':'Python', 'modified.py':'Python', 'union.pdf':'pdf'}

'adbc.txt''file1.py' 键是两个字典中的通用键,我必须得到上述结果。

【问题讨论】:

  • 您能否发布您编写的代码来尝试执行此操作,以及它是如何缩短的?也许提供你的结果背后的原因?

标签: python python-2.7 dictionary


【解决方案1】:

您可以使用字典理解,例如:

dict_1 = {'adbc.txt':'Text','union.pdf':'pdf', 'file1.py':'Python'}
dict_2 = {'adbc.txt':['a.txt','b.txt','c.txt'], 'file1.py':['test.py', 'modified.py']}

result = {val: dict_1[key] for key, values_list in dict_2.items() for val in values_list}
print(result)
# {'a.txt': 'Text', 'b.txt': 'Text', 'c.txt': 'Text', 'test.py': 'Python', 'modified.py': 'Python'}

【讨论】:

  • 如果dict_2 还包含另一个密钥,dict_1 中的一个 not 怎么办?
【解决方案2】:

由于 dict_1 中的一个键不在 dict_2 中,因此列表推导会非常麻烦。用一个简单的循环:

result = {}
for key in dict_1.keys():
    if key in dict_2.keys():
        for file in dict_2[key]:
            result[file]=dict_1[key]
    else:
        result[key]=dict_1[key]

print(result)
# {'a.txt': 'Text', 'b.txt': 'Text', 'c.txt': 'Text', 'union.pdf': 'pdf', 'test.py': 'Python', 'modified.py': 'Python'}

【讨论】:

    最近更新 更多