为什么列表中的值会改变(Python)

问题描述 投票:0回答:1

我创建了一个名为数据库的列表,并将“人”附加到其中。当 for 循环中的 person 值发生变化时,它也会不断更改数组内的值。 “reader_data”中的最后一个值最终会重复“行”次。我想知道为什么会发生这种情况以及如何防止它发生变化。

    with open(sys.argv[1]) as data_file:
        reader_data = csv.reader(data_file)
        headers = next(reader_data)

        database = []
        person = {}

        for row in reader_data:
            for i, value in list(enumerate(row)):
                print(database)
                if (i == 0):
                    person[headers[i]] = value
                else:
                    person[headers[i]] = int(value)

            database.append(person)
        print(database)
python list dictionary for-loop append
1个回答
1
投票

您的

database
列表中有许多对 same
person
词典的引用。为了避免这种情况,请通过在第一个循环中创建
person
变量来附加唯一字典。另请注意,在 with/as 块中声明的变量的局部作用域不限于该块。这意味着代码的其余部分可以取消缩进。

with open(sys.argv[1]) as data_file:
    reader_data = csv.reader(data_file)
    headers = next(reader_data)

database = []

for row in reader_data:
    person = {}
    for i, value in list(enumerate(row)):
        print(database)
        if (i == 0):
            person[headers[i]] = value
        else:
            person[headers[i]] = int(value)

    database.append(person)
print(database)

如果循环中不需要

print
,您可以 使用列表和字典推导式来表达
database
的构造。

database = [
  {
    headers[i]: (value if i == 0 else int(value))
    for i, value in enumerate(row)
  }
  for row in reader_data
]
© www.soinside.com 2019 - 2024. All rights reserved.