在字典中插入值的问题

时间:2019-07-13 07:58:36

标签: python list dictionary python-3.6

在作为列表成员的字典中插入值时遇到的问题。 当我接受用户输入的索引时,它将更改所有索引的值。

nisl = int(input())
isl = [{'x1':None,'y1':None,'x2':None,'y2':None,}]*nisl
# isl = []
# ship[0]['x'] = '1'
for i in range(nisl):
    isl[i]['x1'],isl[i]['y1'],isl[i]['x2'],isl[i]['y2'] = map(int, input().split(' '))
    print(isl)

我得到的输出:

2
0 0 1 1
[{'x1': 0, 'y1': 0, 'x2': 1, 'y2': 1}, {'x1': 0, 'y1': 0, 'x2': 1, 'y2': 1}]
3 0 1 4
[{'x1': 3, 'y1': 0, 'x2': 1, 'y2': 4}, {'x1': 3, 'y1': 0, 'x2': 1, 'y2': 4}]

我期望的是

2
0 0 1 1
[{'x1': 0, 'y1': 0, 'x2': 1, 'y2': 1}, {'x1': None, 'y1': None, 'x2': None, 'y2': None}]
3 0 1 4
[{'x1': 0, 'y1': 0, 'x2': 1, 'y2': 1}, {'x1': 3, 'y1': 0, 'x2': 1, 'y2': 4}]

1 个答案:

答案 0 :(得分:3)

使用:

isl = [{'x1': None, 'y1': None, 'x2': None, 'y2': None,} for _ in range(nisl)]

代替:

isl = [{'x1':None,'y1':None,'x2':None,'y2':None,}]*nisl 

问题是您创建了词典列表,每个词典都有相同的引用。因此,当一个变化时,它也会在另一个变化中反映出来。

作为解决方案,如第一个代码段所示,创建不同的字典。