从 csv 文件创建 OrderedDict

Creating an OrderedDict from a csv file

我想做的是获取一个包含多行和多列数据的 csv 文件,并制作一个有序的字典,我可以在以后调用和迭代。

这是我打开并打印 python 中的 csv 文件时的样子 shell:

这是我现在拥有的代码,正在 shell:

中使用
from collections import OrderedDict

aDict = OrderedDict()
order = next(csv.reader(file))[1:]
file.seek(0)
csvReader = csv.DictReader(file)
for row in csvReader:
    key = row.pop("key")
    aDict[key] = OrderedDict((k, row[k]) for k in order)

我希望它遍历每一行并编写字典,键是日期,值是每列中其他值的列表。

例如:{“12/12/1980”:[28.75,28.87,28.75,28.75,2093900.0,0.0,1.0]}

我不知道您为什么要 pop 从字典中删除关键字并从列表中删除项目。它似乎不符合您创建 OrderedDict.

的目的

这就是我得出的解决方案。它不会弹出任何项目(同样是因为我不知道你为什么要这样做)。

import csv
from collections import OrderedDict

file = open('example.csv', mode='r')

csvReader = csv.reader(file)

# get rid of header row
header = next(csvReader)
# print(header)

odict = OrderedDict()
for row in csvReader:
    odict[row[0]] = row[1:]
    # print(row)

print(odict)

如果将它放入一个函数中,这可能会更干净、更可重用,如下所示:

import csv
from collections import OrderedDict

def parse_csv(filename):

    file = open(filename, mode='r')

    csvReader = csv.reader(file)

    # get rid of header row
    header = next(csvReader)
    # print(header)

    odict = OrderedDict()
    for row in csvReader:
        odict[row[0]] = row[1:]
        # print(row)

    return odict

parse_csv('example.csv')