【问题标题】:Make dicts read from a csv file ordered dicts使从 csv 文件中读取的 dicts 有序 dicts
【发布时间】:2015-06-08 16:01:57
【问题描述】:

using csv.DictReader to read a csv file into a list of dictionaries 时,如何使每个字典成为在 csv 文件中按相同顺序排序的有序字典?谢谢。

import csv
import collections
with open("in.csv") as csvfile:
    reader = csv.DictReader(csvfile,delimiter=" ")
    lst = list(reader)
    lst_orderedDict = [collections.OrderedDict(x) for x in lst]

lst_orderedDict 中的每个有序 dict 在 csv 文件中的排序方式不同?

【问题讨论】:

    标签: python csv dictionary


    【解决方案1】:

    使用带有 csv.reader 的 OrderedDict:

    from collections import OrderedDict
    with open("in.csv") as csvfile:
        reader = csv.reader(csvfile,delimiter=" ")
        keys = next(reader)
        print([OrderedDict(zip(keys,row)) for row in reader ])
    
    
    [OrderedDict([('first_name', 'Baked'), ('last_name', 'Beans')]), OrderedDict([('first_name', 'Lovely'), ('last_name', 'Spam')]), OrderedDict([('first_name', 'Wonderful'), ('last_name', 'Spam')])]
    

    或者将两者结合起来:

    from collections import OrderedDict
    
    with open("in.csv") as csvfile:
        reader = csv.DictReader(csvfile,delimiter=" ")
        keys = reader.fieldnames
        r = csv.reader(csvfile,delimiter=" ")
        print([OrderedDict(zip(keys, row)) for row in r])
    

    【讨论】:

      【解决方案2】:

      字典从不排序。

      但是,您可以按照您想要的任何顺序制作字典键的列表。不要以随机顺序遍历字典,而是遍历您的键列表,并通过其键从字典中获取每个项目。

      键列表从何而来?您可以在 DictReader 对象的构造函数中指定它(参见docs),也可以使用在读取第一行时设置的fieldnames 属性。

      【讨论】:

      • 这就是我们使用 collections.OrderedDict 的原因
      猜你喜欢
      • 1970-01-01
      • 2019-08-28
      • 2018-04-30
      • 2021-09-12
      • 2018-07-10
      • 2011-07-22
      • 2013-03-05
      • 2020-02-13
      • 2018-07-12
      相关资源
      最近更新 更多