Python 添加到列表的dict会增加每个键的值
我有一个空列表字典,所有键都在开头声明:Python 添加到列表的dict会增加每个键的值,python,list,python-3.x,dictionary,Python,List,Python 3.x,Dictionary,我有一个空列表字典,所有键都在开头声明: >>> keys = ["k1", "k2", "k3"] >>> d = dict.fromkeys(keys, []) >>> d {'k2': [], 'k3': [], 'k1': []} 当我尝试将坐标对(列表[“x1”,“y1”])添加到一个键的列表中时,它会添加到所有键的列表中: >>> d["k1"].append(["x1", "y1"]) >>>
>>> keys = ["k1", "k2", "k3"]
>>> d = dict.fromkeys(keys, [])
>>> d
{'k2': [], 'k3': [], 'k1': []}
当我尝试将坐标对(列表[“x1”,“y1”]
)添加到一个键的列表中时,它会添加到所有键的列表中:
>>> d["k1"].append(["x1", "y1"])
>>> d
{'k1': [['x1', 'y1']], 'k2': [['x1', 'y1']], 'k3': [['x1', 'y1']]}
我要找的是:
>>> d
{'k1': [['x1', 'y1']], 'k3': [], 'k1': []}
在Python 3中如何实现这一点?看起来这些列表中的每一个实际上都是对单个列表的引用。附加到其中一个将附加到所有这些 我认为您无法在仍然使用
fromkeys
的情况下解决此问题。试着用听写理解代替
d = {k: [] for k in keys}
按如下方式创建词典:
d = {k: [] for k in keys}
dict.fromkeys()
将对同一列表的引用作为所有键的值放入字典中
您可以通过查看值的id
将其可视化:
>>> d = dict.fromkeys(keys,[])
>>> [id(v) for v in d.values()]
[4413495432, 4413495432, 4413495432]
由于
id
唯一地标识一个对象,这意味着您有三次相同的对象 fromkeys是一个类方法,它将第二个参数作为所有键的值传递,因此它们都将引用一个对象。相反,如果您不通过值Python,将将NONE视为每个项目的值。然后,您可以将2d列表指定给密钥,而不是附加:
>>> d = dict.fromkeys(keys)
>>> d["k1"] = [["x1", "y1"]]
>>> d
{'k3': None, 'k2': None, 'k1': [['x1', 'y1']]}
python就是这样创建了fromkeys
方法的:
@classmethod
def fromkeys(cls, iterable, value=None):
d = cls()
for key in iterable:
d[key] = value
return d