Python dict.fromkeys()生成list()的副本而不是新的副本

时间:2016-03-27 21:59:38

标签: python debugging dictionary

我想使用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': []}

有一种方法可以在一行中完成吗?

1 个答案:

答案 0 :(得分:1)

只做

names_in_years["2"] = names_in_years["2"] + names

而不是笨重的

names_in_years["2"].extend(names)

前者将旧值分配给旧值,后者将返回的值改为原位。在处理更新密钥值时,分配通常比就地变换更安全,更安全。