[英]How to create a list containing N Lists each containing N distinct dictionaries using comprehension syntax?
oneCounts = [[{'l':0,'r':0,'t':0,'b':0}] * N for i in range(0,N)]
oneCounts[0][1]['t'] = 3
在上面的代码中,在特定字典上设置键值会导致同一列表中的所有字典将它们的 t 键值设置为相同的值。 这出乎我的意料。 我错过了什么?
将第一行更改为
oneCounts = [[{'l':0,'r':0,'t':0,'b':0} for _ in range(N)] for i in range(0, N)]
# oneCounts = [[{'l':0,'r':0,'t':0,'b':0} for _ in range(N)] for _ in range(N)]
为了创建独立的词典。
[x] * n
创建一个包含对同一对象x
的 n 个引用的列表。 您应该只在x
是不可变类型时使用该语法,例如int
。
意外结果背后的原因是您只调用了一次构造函数,然后使用了 N 次相同的对象。 因此,实际上,您向oneCounts追加了 N 次相同的对象,因为包含字典的列表具有相同的引用。
尝试以下操作:
oneCounts = []
for i in range(N):
oneCounts.append([{'l':0,'r':0,'t':0,'b':0} for j in range(N)])
这里, oneCounts是一个包含 N 个列表的列表,每个列表包含 N 个单独的字典。
编辑:我刚刚注意到用户“schwobaseggl”给出的答案。 它和我的代码做同样的事情,但输入更少。 我个人更喜欢这个答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.