如何在没有列表推导的情况下从csv文件创建字典列表

问题描述 投票:-1回答:1

输出必须如下:

[{'id': '1', 'first_name': 'Heidie','gender': 'Female'}, {'id': '2', 'first_name': 'Adaline', 'gender': 'Female'}, {...}

有一个代码片段可以运行,运行此要求。

with open('./test.csv', 'r') as file_read:
   reader = csv.DictReader(file_read, skipinitialspace=True)
   listDict = [{k: v for k, v in row.items()} for row in reader]
   print(listDict)

但是,我无法理解上述代码的一些要点:

  1. 列表理解:listDict = [{k: v for k, v in row.items()} for row in reader] python如何解释这个? 编译器如何使用标题(idfirst_namegender)及其值组合列表? 如何使用嵌套的for实现此代码

我读了这些答案,但我仍然不明白:

我的csv文件:

id,first_name,last_name,email,gender
1,Heidie,Philimore,[email protected],Female
2,Adaline,Wapplington,[email protected],Female
3,Erin,Copland,[email protected],Female
4,Way,Buckthought,[email protected],Male
5,Adan,McComiskey,[email protected],Male
6,Kilian,Creane,[email protected],Male
7,Mandy,McManamon,[email protected],Female
8,Cherish,Futcher,[email protected],Female
9,Dave,Tosney,[email protected],Male
10,Torr,Kiebes,[email protected],Male
python csv dictionary for-loop list-comprehension
1个回答
1
投票

你的清单理解:

listDict = [{k: v for k, v in row.items()} for row in reader]

等于:

item_list = []

#go through every row
for row in reader:
    item_dict = {}
    #in every row go through each item
    for k,v in row.items():
        #add each items k,v to dict.
        item_dict[k] = v
    #append every item_dict to item_list
    item_list.append(item_dict)

print(item_list)

编辑(更多解释):

#lets create a list
list_ = [x ** 2 for x in range(0,10)]
print(list_)

这会返回:

[0,1,4,9,16,25,36,49,64,81]

你可以这样写:

 list_ = []
 for x in range(0,10):
     list_.append(x ** 2)

所以在那个例子中你是'向后'读它

现在假设下一个:

#lets create a list
list_ = [x ** 2 for x in range(0,10) if x % 2 == 0]
print(list_)

这会返回:

[0,4,16,36,64]

你可以这样写:

 list_ = []
 for x in range(0,10):
     if x % 2 == 0:
         list_.append(x ** 2)

所以这不是100%倒退,但它应该是合乎逻辑的发生。希望这对你有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.