2016-06-21 15 views
-1

私は辞書のリストを持っています。私もリストを持っています - フィールドをCSVファイルに書きたい順番です(辞書の必須キー)。私は以下のコードを使用してcsvファイルを作成しました。辞書のリストをPythonで特定のフィールド順のcsvに書く

lst=[{"b":2,"d":3},{"a":1,"b":1,"c":5},{"d":7,"c":1}...] 
order = ["a","b","c","d"] 

keys = lst[index].keys() 
with open('file.csv', 'wb') as output_file: 
    dict_writer = csv.DictWriter(output_file, keys) 
    dict_writer.writeheader() 
    dict_writer.writerows(lst) 

最終CSVファイルは順番にキーを持っている:

b,d,a,c 
2,3,, 

しかし、私は順序リストに従って、それをしたいです。どうやってやるの?

+0

なぜ 'order'ではなく' lst [index] .keys() 'を渡していますか? – BrenBarn

+0

@BrenBarn:あなたはそれを答えにしたいですか? – SuperSaiyan

答えて

1

このスニペットは、希望する出力を生成します。

lst=[{"b":2,"d":3},{"a":1,"b":1,"c":5},{"d":7,"c":1}] 
order = ["a","b","c","d"] 
with open('file.csv', 'w') as output_file: 
    dict_writer = csv.DictWriter(output_file, order) 
    dict_writer.writeheader() 
    dict_writer.writerows(lst) 
1

あなたは決してorderを使用しませんでした。 DictWriterを作成するときにkeysの代わりにそれを渡してください。

0

最初のご注文リスト上のdict
二種類のリストのキーベースのリストをからすべてのキーを取得
最終ソートキー

lst = [{'b': 2, 'd': 3}, {'a': 1, 'c': 5, 'b': 1}, {'c': 1, 'd': 7}] 
flatLst = set([ k for ele in lst for k in ele.keys()]) 
def sortKey(x): 
    return order.index(x) if x in order else len(order) 
orderedHeader = sorted(flatLst, key = lambda x:sortKey(x)) 
with open(filePath,'wb') as f: 
    w = csv.DictWriter(f,orderedHeader) 
    w.writeheader() 
    w.writerows(lst) 

出力に基づいて、ヘッダを記述します。

a b c d 
    2  3 
1 1 5 
     1 7