2017-03-16 36 views
1

我試圖寫字典的名單,說: list = [dict1, dict2,...,] 下列要求: dict1 = {key1: value1, key2: value2,...} 我怎麼能寫每個詞典到2列,連續,成一個單一的csv文件?你將不得不列1和2都屬於關鍵和dict1值,列3和4包含dict2鍵和值...等等?寫字典的名單,作爲連續列到csv

+0

要在5列6 dict3? – salparadise

+0

是 - 連續字典到下一個2列。 –

+0

首先,不要稱之爲「list」。 – DyZ

回答

1

請嘗試這個節目,希望它會產生你所需要的輸出,

import csv 

dict1 = {'key11' : 'value11', 'key12' : 'value12', 'key13' : 'value13'} 
dict2 = {'key21' : 'value21', 'key22' : 'value22', 'key23' : 'value23'} 
dict3 = {'key31' : 'value31', 'key32' : 'value32', 'key33' : 'value33'} 

list1 = [dict1, dict2, dict3] 

with open('mycsvfile.csv','wb') as f: 
    w = csv.writer(f) 
    for entry in list1: 
     lis = [] 
     for key,values in sorted(entry.items()): 
      lis.append(key) 
      lis.append(values) 
     w.writerow(lis) 

輸出:

key11,value11,key12,value12,key13,value13 
key21,value21,key22,value22,key23,value23 
key31,value31,key32,value32,key33,value33 

請讓我知道interms任何疑問的。

1

假設您的清單是l=[{1: 2, 3: 4, 5: 6}, {9: 10, 11: 12, 7: 8}, {17: 18, 13: 14, 15: 16}]。先從每個字典中提取鍵和值:

[l0.items() for l0 in l] 
# [dict_items([(1, 2), (3, 4), (5, 6)]), 
# dict_items([(9, 10), (11, 12), (7, 8)]), 
# dict_items([(17, 18), (13, 14), (15, 16)])] 

現在,讓我們的元組的每個列表組合成一個平坦的列表:

from itertools import chain 
[list(chain.from_iterable(l0.items())) for l0 in l] 
# [[1, 2, 3, 4, 5, 6], 
# [9, 10, 11, 12, 7, 8], 
# [17, 18, 13, 14, 15, 16]] 

結果可直接輸送到CSV作家。

1

使用itertools鏈:

import csv 
from itertools import chain 

dictionary = [{'key1': 'value1'}, {'key2': 'value2'}, 
       {'key3': 'value3'}, {'key4': 'value4'}] 

with open('file', 'w') as fh: 
    csv_file = csv.writer(fh) 
    csv_file.writerow(chain(*(i for e in dictionary for i in zip(e.keys(), e.values())))) 

結果:

cat file 
key1,value1,key2,value2,key3,value3,key4,value4