我刚开始学习python并坚持使用词典。
我编写了以下示例程序来合并两个词典:
dict4 = {}
dict1 = {'name' : 'Alice', 'Age' : '12'}
dict2 = {'name' : 'Apple', 'Age' : '13', 'Sex' : 'M'}
dict4 = dict.copy(dict1)
for i in dict2:
if i not in dict4:
dict4[i] = dict2[i]
else:
list(dict4[i]).append(dict2[i])
预期产出
dict4 = {'name' : ['Alice', 'Apple'], 'Age' : ['12', '13'], 'Sex' : ['', 'M']}
但我看到了 dict4
{'name': 'Apple', 'Sex': 'M', 'Age': 13}
答案 0 :(得分:2)
只需创建列表,就像这样
for key in dict2:
dict4[key] = [dict1.get(key, ''), dict2.get(key, '')]
注意我们使用dict2.get
,如果找不到当前密钥,则接受默认值。
如果你想确保你想要两个词典中的所有键,请从这两个词典中创建一组键
>>> result = {}
>>> for key in (dict1.keys() | dict2):
... result[key] = [dict1.get(key, ''), dict2.get(key, '')]
...
>>> result
{'name': ['Alice', 'Apple'], 'Sex': ['', 'M'], 'Age': ['12', '13']}
你仍然可以通过使用字典理解来完成这个,就像这样
>>> {k: [dict1.get(k, ''), dict2.get(k, '')] for k in (dict1.keys() | dict2)}
{'name': ['Alice', 'Apple'], 'Sex': ['', 'M'], 'Age': ['12', '13']}
如果您想使用任意数量的词典使其成为通用词,您可以使用以下
>>> from itertools import chain
>>> dicts = (dict1, dict2)
>>> result = {}
>>> for key in set(chain.from_iterable(dicts)):
... result[key] = []
... for d in dicts:
... result[key].append(d.get(key, ''))
...
>>> result
{'name': ['Alice', 'Apple'], 'Sex': ['', 'M'], 'Age': ['12', '13']}
答案 1 :(得分:0)
这是因为这一行:
list(dict4[i]).append(dict2[i])
根本不会修改dict4
。
这一行
dict4[i] = dict2[i]
简单地用dict2&#39覆盖dict1的值。它不会给你一个清单。
他们都没有做你想要的。
要达到预期效果,请尝试以下操作:
result = {}
for key, value in dict1.items():
result.setdefault(key, []).append(value)
for key, value in dict2.items():
result.setdefault(key, []).append(value)
作为简化,你可以这样做
result = {}
for key, value in dict1.items() + dict2.items():
result.setdefault(key, []).append(value)
答案 2 :(得分:0)
import os, winshell
from win32com.client import Dispatch
desktop = winshell.desktop()
path = os.path.join(desktop, "Media Player Classic.lnk")
target = r"P:\Media\Media Player Classic\mplayerc.exe"
wDir = r"P:\Media\Media Player Classic"
icon = r"P:\Media\Media Player Classic\mplayerc.exe"
shell = Dispatch('WScript.Shell')
shortcut = shell.CreateShortCut(path)
shortcut.Targetpath = target
shortcut.WorkingDirectory = wDir
shortcut.IconLocation = icon
shortcut.save()