2016-04-11 26 views
1

私がしようとしているのは、いくつかの行と列のデータを含むcsvファイルをとり、私が呼び出して後で繰り返すことができる順序付き辞書を作ることです。csvファイルからOrderedDictを作成する

"csv printed"

をそしてここで私が今持っていると、シェル内で遊んでいたコードです:

これ

は、それは私が開いて、私のpythonシェルでcsvファイルを印刷するときのように見えるものです

私はそれが各行を反復処理し、キーが日付であることで辞書を書きたい
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"

その値を各列の他の値のリストとして表示します。

例:{ "1980年12月12日":[28.75,28.87,28.75,28.75,2093900.0,0.0,1.0]}

+0

私は人々がコピーできるように、あなたがあなたの質問にプレーンテキストとしてのコードを追加することを示唆していますそれらを実行して修正できるように貼り付けます。 – eestrada

答えて

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') 
関連する問題