创建不同列表的空白列表的字典

pau*_*ski 4 python dictionary copy list

我正在尝试创建一个列表的字典,可以附加到for循环中.但是,如果我使用创建一个dict fromkeys,列表将成为"指针"的副本,而不是新列表.例如,

newdict = dict.fromkeys(range(10), [])

- 要么 -

newdict = dict.fromkeys(range(10), list())

两者都产生相同的数据结构,一个带有SAME列表的dict作为值对.因此,当任何键更新时,例如 - newdict[0].append(100),相应的输出print newdict是:

{0: [100], 1: [100], 2: [100], 3: [100], 4: [100], 5: [100], 6: [100], 7: [100], 8: [100], 9: [100]}

有关如何避免这种情况而不必在for循环中迭代的任何想法?提前致谢.

DSM*_*DSM 5

两种最常见的方法是使用字典理解:

>>> d = {k: [] for k in range(10)}
>>> d[3].append(100)
>>> d
{0: [], 1: [], 2: [], 3: [100], 4: [], 5: [], 6: [], 7: [], 8: [], 9: []}
Run Code Online (Sandbox Code Playgroud)

或者使用a defaultdict和forego设置任何键:

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> d
defaultdict(<type 'list'>, {})
>>> d[9].append(100)
>>> d
defaultdict(<type 'list'>, {9: [100]})
Run Code Online (Sandbox Code Playgroud)

作为第三种选择,通过使用setdefault- 例如d.setdefault(k, [])代替d[k],在这种defaultdict情况下,您可以避免需要预设[]:

>>> d = {}
>>> d.setdefault(3, []).append(100)
>>> d
{3: [100]}
Run Code Online (Sandbox Code Playgroud)