当字典值未在forloop内重置时,列表值将被重写

2024-05-04 20:30:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码发生了一些奇怪的事情,我不明白。我有以下几行:

#informe.py
import csv
from pprint import pprint
def leer_camion(nombre_archivo):
    diccionario = {}
    camion = []

    with open(nombre_archivo, 'rt') as f:
        rows = csv.reader(f)
        headers = next(rows)
        for row in rows:
            diccionario['nombre'] = row[0]
            diccionario['cajones'] = int(row[1])
            diccionario['precio'] = float(row[2]) 
            camion.append(diccionario)
            pprint(camion)
            #diccionario = {}
        return camion


 lista = leer_camion('../Data/camion.csv')

我的问题是,如果我不在for末尾重置字典,列表的形式如下:

[{'cajones': 100, 'nombre': 'Lima', 'precio': 32.2}]
[{'cajones': 50, 'nombre': 'Naranja', 'precio': 91.1},
 {'cajones': 50, 'nombre': 'Naranja', 'precio': 91.1}]
[{'cajones': 150, 'nombre': 'Caqui', 'precio': 103.44},
 {'cajones': 150, 'nombre': 'Caqui', 'precio': 103.44},
 {'cajones': 150, 'nombre': 'Caqui', 'precio': 103.44}]
...

换句话说,如果我没有误解的话,字典值在字典和camion中都会被重写。最后一个列表包含csv文件最后一列中的值。另一方面,如果我取消对dictionary = {}行的注释,也就是说,如果我在循环结束时重置字典,则列表的格式正确:

[{'cajones': 100, 'nombre': 'Lima', 'precio': 32.2}]
[{'cajones': 100, 'nombre': 'Lima', 'precio': 32.2},
 {'cajones': 50, 'nombre': 'Naranja', 'precio': 91.1}]
[{'cajones': 100, 'nombre': 'Lima', 'precio': 32.2},
 {'cajones': 50, 'nombre': 'Naranja', 'precio': 91.1},
 {'cajones': 150, 'nombre': 'Caqui', 'precio': 103.44}]
...

为什么会发生这种情况? 非常感谢