而不是使用DictWriter它可以在你的情況下,混亂的字典是沒有順序的我嘗試使用的writerow CSV的方法。 這裏是我做的:
"""
a) First took all the keys of dictionary and sorted it, which is not necessary.
b) Created a result list which appends value related the headers which is key of our input dict and if key is not available then .get() will return None.
So result list will contain lists for rows data.
c) Wrote header and each row from result list in csv file
"""
data_dict = [{ "Header_1":"data_1", "Header_2":"data_2", "Header_3":"data_3"},
{ "Header_1":"data_4", "Header_2":"data_5", "Header_3":"data_6"},
{ "Header_1":"data_7", "Header_2":"data_8", "Header_3":"data_9", "Header_4":"data_10"},
{ "Header_1":"data_11", "Header_3":"data_12"},
{ "Header_1":"data_13", "Header_2":"data_14", "Header_3":"data_15"}]
"""
In the third dict we have extra key, value.
In forth we dont have have header_2 were we aspect blank value in our csv file.
"""
process_data = [ [k,v] for _dict in data_dict for k,v in _dict.iteritems() ]
headers = [ i[0] for i in process_data ]
headers = sorted(list(set(headers)))
result = []
for _dict in data_dict:
row = []
for header in headers:
row.append(_dict.get(header, None))
result.append(row)
import csv
with open('demo.csv', 'wb') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=';', dialect='excel',
quotechar='|', quoting=csv.QUOTE_MINIMAL)
spamwriter.writerow(headers)
for r in result:
spamwriter.writerow(r)
![enter image description here](https://i.stack.imgur.com/IBT2m.png)
能否請您提供一個樣本字典結構。 – 2014-11-06 06:37:43
問題是在代碼執行之前字典密鑰是未知的,但我希望能夠從列表的字典中編寫CSV。我正在編譯整個列表的字典,然後迭代鍵來識別可用於字段名的唯一鍵。然而,隨着數據集的增長,我希望能夠在我知道所有的字典之前編寫一個CSV。 – Pranab 2014-11-06 08:41:43
Pranab請在下面查看我的答案。 – 2014-11-06 15:26:35