创建一个空字典列表

18

我想创建一个长度可变的列表,其中包含空目录。

n = 10 # size of list
foo = []
for _ in range(n)
    foo.append({})

你会以同样的方式去做吗,或者有其他不同的方法吗?

a = [{}*n]
1个回答

47

列表理解来拯救!

foo = [{} for _ in range(n)]

恐怕没有更短的表示法。在Python 2中,你要使用xrange(n)代替range(n),以避免创建一个无用的列表。

另一种方法,[{}] * n将创建一个长度为n的列表,其中只有一个字典,被引用了n次。这会导致添加字典键时出现问题。


1
之前给出的答案对我而言是可以的,因为我在下一步中将整个列表转换为JSON,所以我并不关心引用。但我会接受你的答案,因为它具有更普遍的用途。 - Martin Flucka
7
即使只是用于 JSON,使用 [{}] * 3 不是一个好的做法;你会发现自己忘记了这个小细节,当你后来添加键和值时,你会遇到一个令人不愉快的惊喜。 - Martijn Pieters
@MartijnPieters 你是完全正确的,安全第一。 - Martin Flucka
@j08lue:这就是我提到它的原因。但是对于Python 3,xrange()被重命名为range()并进行了改进,我的初始示例假定使用Python 3。 - Martijn Pieters
1
刚被 [{}] * n 给搞崩了。这是否意味着在 Python 中预分配列表不是“Pythonic”的?总的来说,在 Python 中,列表一直是一个大问题,但我有一种感觉,我只是没有按照预期使用它们... - JustinBlaber
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接