Python中为何无法生成预期的字典列表?(含CSV代码对比)
为什么遍历字典无法生成预期的字典列表?
问题根源:Python字典的默认遍历行为
直接用for i in 字典循环时,Python默认只会迭代字典的键,而不是完整的键值对。所以你的第一段代码里,lst.append(i)实际上是把每个键(比如"Baja Taco")添加到列表里,自然得不到包含键值对的字典列表。
对比:csv.DictReader的迭代逻辑
csv.DictReader返回的迭代器,每次循环返回的i本身就是一个完整的字典——它把CSV的列名作为键,对应行的单元格内容作为值,所以直接append到列表里就能得到字典列表,和遍历普通字典的行为完全不同。
修正第一段代码的方法
要生成预期的字典列表,你需要遍历字典的键值对,然后为每一对创建一个新字典:
方法1:使用items()遍历键值对
Taqueria = { "Baja Taco": 4.25, "Burrito": 7.50, "Bowl": 8.50, "Nachos": 11.00, "Quesadilla": 8.50, "Super Burrito": 8.50, "Super Quesadilla": 9.50, "Taco": 3.00, "Tortilla Salad": 8.00 } lst = [] for key, value in Taqueria.items(): lst.append({key: value}) print(lst)
方法2:用列表推导式简化代码
Taqueria = { "Baja Taco": 4.25, "Burrito": 7.50, "Bowl": 8.50, "Nachos": 11.00, "Quesadilla": 8.50, "Super Burrito": 8.50, "Super Quesadilla": 9.50, "Taco": 3.00, "Tortilla Salad": 8.00 } lst = [{key: value} for key, value in Taqueria.items()] print(lst)
运行修正后的代码,就能得到你预期的输出:
[{"Baja Taco": 4.25},{"Burrito": 7.50},{"Bowl": 8.50},{"Nachos": 11.00},{"Quesadilla": 8.50},{"Super Burrito": 8.50},{"Super Quesadilla": 9.50},{"Taco": 3.00},{"Tortilla Salad": 8.00}]
内容的提问来源于stack exchange,提问作者saso yoo
相关产品推荐
相关产品推荐

