python在dict extend值中显示列表
如何创建列表字典?以下是我尝试过的:python在dict extend值中显示列表,python,list,Python,List,如何创建列表字典?以下是我尝试过的: zigzag=dict.fromkeys(范围(1,4),[])) 对于范围(1,4)内的i: Z字形[i]。扩展(范围(i,13,4)) 我期望得到的是: { 1: [1,5,9,13], 2: [2,6,10], 3: [3,7,11] } 但实际结果在每个值中都有相同的列表: { 1: [1, 5, 9, 2, 6, 10, 3, 7, 11], 2: [1, 5, 9, 2, 6, 10, 3, 7, 11], 3: [1, 5, 9, 2, 6
zigzag=dict.fromkeys(范围(1,4),[]))
对于范围(1,4)内的i:
Z字形[i]。扩展(范围(i,13,4))
我期望得到的是:
{
1: [1,5,9,13],
2: [2,6,10],
3: [3,7,11]
}
但实际结果在每个值中都有相同的列表:
{
1: [1, 5, 9, 2, 6, 10, 3, 7, 11],
2: [1, 5, 9, 2, 6, 10, 3, 7, 11],
3: [1, 5, 9, 2, 6, 10, 3, 7, 11]
}
我不知道结果是怎么发生的。如何获得预期答案?来自以下文档:
fromkeys()
是返回新字典的类方法。值默认为None
。所有的值都只引用一个实例,因此,值作为一个可变对象(如空列表)通常没有意义。要获得不同的值,请使用dict理解
在Python中,可变对象(如列表)的赋值不会创建新对象:它们只是对现有对象进行新引用。因此,您看到的是,字典中的每个值实际上都引用了您传递到dict.fromkeys()
中的同一个空列表
相反,你可以简单地做
zigzag={}
对于范围(1,4)内的i:
Z字形[i]=列表(范围(i,14,4))
或使用类似于重新推荐的文档:
zigzag={i:list(范围(i,14,4))表示范围(1,4)中的i}
进一步阅读Python中可变与不可变数据类型:
range()
此外,如果您希望13
出现在zigzag[1]
中,则应使用停止值14
,而不是13
。停止值是独占的。从以下文件:
对于正阶跃,范围r的内容由公式r[i]=start+step*i
确定,其中i>=0
和r[i]