当字典值未在 for 循环中重置时,列表值被重写 [duplicate]

list values being rewritten when dictionary values are not reseted inside for-loop [duplicate]

提问人:invalid syntax 提问时间:8/17/2021 最后编辑:invalid syntax 更新时间:8/17/2021 访问量:84

问:

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

#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}]
...

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

[{'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}]
...

为什么会这样? 多谢!

python list 字典 for 循环 数据操作

评论

2赞 Barmar 8/17/2021
如果不重置它,则每次都会更新相同的词典。
0赞 invalid syntax 8/17/2021
明白了。谢谢!
1赞 Barmar 8/17/2021
正常的模式是在循环体的开头初始化字典。
2赞 Barmar 8/17/2021
或者只是分配整个字典:diccionario = {'nombre': row[0], 'cajones': int(row[1]), 'precio': float(row[2])}

答: 暂无答案