从csv文件创建OrderedDict

时间:2016-04-11 20:54:39

标签: csv python-3.x ordereddictionary

我要做的是拿一个带有几行和一列数据的csv文件,然后创建一个我可以调用的有序字典,然后迭代。

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

"csv printed"

这是我现在拥有的代码,并且正在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)

"my unworking code"

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

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

1 个答案:

答案 0 :(得分:2)

我不知道为什么你要从字典中删除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')