python - 创建不是同一个列表的空白列表的字典

标签 python list dictionary copy

<分区>

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

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

-- 或--

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

两者都产生相同的数据结构,一个具有相同列表作为值对的字典。这样当任何 key 更新时,例如- 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 循环中迭代的任何想法?提前致谢。

最佳答案

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

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

或者使用 defaultdict 并完全放弃设置任何键:

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

作为第三种选择,使用setdefault——例如d.setdefault(k, []) 而不是 d[k],就像在 defaultdict 中一样,您可以避免需要预设 []:

>>> d = {}
>>> d.setdefault(3, []).append(100)
>>> d
{3: [100]}

关于python - 创建不是同一个列表的空白列表的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20715471/

相关文章:

python - 在循环中恢复循环的Pythonic方法是什么

list - Haskell 中的列表元素相乘

python - 连接子列表python

java - java中允许remove()方法工作的Iteration的内部实现是什么?

python - 如何解压列表字典(字典!)并作为分组元组返回?

python - 导入caffe时出错

python - 多个 mixin 和 __init__ 方法

python - 当我更改图标时,Pyinstaller exe 不工作

c++ - 在矩阵中打印唯一行

python - 内存效率 : One large dictionary or a dictionary of smaller dictionaries?