如何以正确的方式在列表中附加词典

2024-05-16 22:15:23 发布

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

给定以下CSV文件,我尝试使用for循环和append函数获取列表中的词典:

Margherita , 5.5
Salami , 7.0
Schinken , 7.0

我的代码是:

Pizzadict = {}
Pizzalist = []
with open("preisliste.txt", 'r') as textfile:
    preisenlist_csv = csv.reader(textfile)
    for ind, rows in enumerate(preisenlist_csv):
        Pizzadict.clear()
        Pizzadict[rows[0]] = rows[1]
        Pizzalist.append(Pizzadict)
print(Pizzalist)

输出:

[{'Schinken ': ' 7.0'}, {'Schinken ': ' 7.0'}, {'Schinken ': ' 7.0'}]

那么,为什么列表只需要最后一本词典,然后打印3次呢? 我想要一份清单

[1.dict, 2. dict, 3.dict]

而不是

[3.dict, 3.dict, 3.dict]

Tags: 文件csv函数列表fordict词典rows
3条回答

Pizzalist.append(Pizzadict)引用附加到同一dictionary对象。你知道吗

例如,当您使用Pizzadict[rows[0]] = rows[1]Pizzadict.clear()对其进行变异时,这一变化将由三个引用反映出来。你知道吗

您需要附加词典的副本:

Pizzalist.append(Pizzadict.copy())

或者每次只构建一个新的dict:

Pizzalist.append({rows[0]: rows[1]})

因为您将同一个字典附加3次,所以字典是引用类型,所以您的列表将对字典的引用存储3次,而不是单个字典,而是在for循环中创建新字典。你知道吗

for ind, rows in enumerate(preisenlist_csv):
    Pizzalist.append({rows[0]: rows[1]})

试试这个:

with open('preisliste.txt') as textfile:
    PizzaList = [i.strip().split(',') for i in textfile.readlines()]
PizzaDict = [{i:j} for i,j in PizzaList]

输出

[{'Margherita ': ' 5.5'}, {'Salami ': ' 7.0'}, {'Schinken ': ' 7.0'}]

相关问题 更多 >