2016-06-21 46 views
-1

我有一個字典列表,其中包含隨機鍵:值對。我也有一個列表 - 我想將字段寫入csv文件的順序(Essentialy字典的鍵)。我使用下面的代碼來編寫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

爲什麼你通過'lst [index] .keys()'而不是'order'? – 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。只需通過該代替keys即可創建DictWriter。

0

首先獲得您的訂單列表從字典
第二排序列表鍵基地的列表中所有鍵
最終根據排序鍵

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 
相關問題