我创建了一个名为数据库的列表,并将“人”附加到其中。当 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)
您的
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
]