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
  • 我读了这些答案,但还是不明白:

    我的csv文件:

    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
    如何始终标识标题?编辑了这篇文章。希望它更清晰。一开始,它是一种“奇怪”的语法,但随着你习惯了它,它会为你节省大量的打字时间,而且实际上更容易阅读;)这个例子很好!谢谢