【发布时间】:2016-03-27 21:59:38
【问题描述】:
我想使用dict.fromkeys() 方法生成字典。我有一年list,我想给values他们分配list object。问题是dict.fromkeys() 生成列表的副本。因此,当我更新列表的元素时,它会更新所有副本。
>>> years=["1","2","3"]
>>> names=["a","b","c"]
>>> blank=[]
>>> names_in_years=dict.fromkeys(years,blank.copy())
>>> names_in_years
{'2': [], '4': [], '3': [], '1': []}
>>> names_in_years["2"].extend(names)
>>> names_in_years
{'2': ['a', 'b', 'c'], '4': ['a', 'b', 'c'], '3': ['a', 'b', 'c'], '1': ['a', 'b', 'c']}
我想单独更新dictionary 对象。结果低于我想要的:
{'2': ['a', 'b', 'c'], '4': [], '3': [], '1': []}
有没有办法在一行中做到这一点?
【问题讨论】:
-
使用好的 ol' dict-comprehensions。
-
这不应该被关闭。这里的问题与链接的答案完全不同。问题在于,即使发布者试图在函数调用中添加 copy,但从根本上说,相同的对象(或副本)用于所有初始实例化。如果你传入一个字典,你会得到类似的行为(所有值都是 same 字典)。
标签: python debugging dictionary