Python 如何从csv文件中创建词典列表而无需列表理解
输出必须如下所示:Python 如何从csv文件中创建词典列表而无需列表理解,python,csv,dictionary,for-loop,list-comprehension,Python,Csv,Dictionary,For Loop,List Comprehension,输出必须如下所示: [{'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)
[{'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)
但是,我无法理解上述代码的一些要点:
listDict=[{k:v代表k,v在row.items()}代表reader中的row]
- python如何解释这一点
- 编译器如何始终使用标题(
,id
,名字
)及其值组合列表性别
- 使用嵌套的
for
id,first_name,last_name,email,gender
1,Heidie,Philimore,hphilimore0@msu.edu,Female
2,Adaline,Wapplington,awapplington1@icq.com,Female
3,Erin,Copland,ecopland2@google.co.uk,Female
4,Way,Buckthought,wbuckthought3@usa.gov,Male
5,Adan,McComiskey,amccomiskey4@theatlantic.com,Male
6,Kilian,Creane,kcreane5@hud.gov,Male
7,Mandy,McManamon,mmcmanamon6@omniture.com,Female
8,Cherish,Futcher,cfutcher7@accuweather.com,Female
9,Dave,Tosney,dtosney8@businesswire.com,Male
10,Torr,Kiebes,tkiebes9@dyndns.org,Male
您的列表理解:
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)
编辑(更多说明):
这将返回:
[0,1,4,9,16,25,36,49,64,81]
[0,4,16,36,64]
您可以这样写:
list_ = []
for x in range(0,10):
list_.append(x ** 2)
list_ = []
for x in range(0,10):
if x % 2 == 0:
list_.append(x ** 2)
所以在这个例子中,是的,你“倒读”
现在假设下一个:
#lets create a list
list_ = [x ** 2 for x in range(0,10) if x % 2 == 0]
print(list_)
这将返回:
[0,1,4,9,16,25,36,49,64,81]
[0,4,16,36,64]
您可以这样写:
list_ = []
for x in range(0,10):
list_.append(x ** 2)
list_ = []
for x in range(0,10):
if x % 2 == 0:
list_.append(x ** 2)
所以这不是100%的倒退,但它应该是合乎逻辑的。希望这对你有帮助 你能发布你的
test.csv
的样本吗?@user5173426完成!在这种情况下,理解是一种浪费。不需要dict理解,因为每一行都已经是dict。因此,列表理解也是如此,因为不需要对元素进行进一步的操作。一个简单的ˋlistDict=list(reader)ˋ就足够了。我是否应该一直背对背地阅读列表理解代码?除此之外,k
如何始终标识标题?编辑了这篇文章。希望它更清晰。一开始,它是一种“奇怪”的语法,但随着你习惯了它,它会为你节省大量的打字时间,而且实际上更容易阅读;)这个例子很好!谢谢