2013-10-16 109 views
2

將字典列表操作爲更易於寫入csv的內容時遇到問題。例如,我有一個像這樣的詞典列表:從Python字典列表中選擇某些鍵值到CSV

dict_example = [{'id':1,'key1':'value1','key2':'value2'},{'id':1,'key1':'value3','key2':'value4'}] 

理想情況下,我想一個CSV出這個,這將是:

id,key1,key2,key1,key2 
1,value1,value2,value3,value4 

基本上,我想找出最簡單這樣做的方法。我正在使用的這個清單要大得多。另外,對於每個'id',有4個字典代表不同的值,我希望每個'id'都在一行中。

有什麼想法?我可以想辦法通過將值提取到其他形式來實現此目的,但不能將它們留在字典中,然後將其寫入CSV。

編輯:

我現在需要弄清楚什麼數據格式可能是最有用的。對於每個'id','key1'和'key2'的值有不同的'階段'。該ID是持久的。

什麼將是一個有用的詞典存儲在?

例子,因爲它現在已經存在,更清晰:

dict = dict_example = [{'id':1,'stage':'stage1','key2':'value1'},{'id':1,'stage':'stage2','key2':'value2'}] 
+2

那麼,如果有另一個字典...你會有key1,key2呢?似乎不是一個非常有用的格式... –

+0

謝謝,這似乎我需要重新考慮我如何存儲。我遇到的問題是,我正在不同點上拍攝數據。我會更新更多的信息。 – GatesOfDelirium

回答

0

您可以使用itertools.groupby到一定的標準組 - 在你的情況下,'id'

import itertools 

d = [{'id':1,'key1':'value1','key2':'value2'},{'id':1,'key1':'value3','key2':'value4'}, \ 
     {'id':1,'key4':'value5'}, {'id':2,'key1':'value3','key2':'value4'}] 

for id, group in itertools.groupby(d, lambda x : x['id']): 
    key_line = 'id' 
    values_line = str(id) 
    for g in group: 
     for key in sorted(g.keys()): 
      if key == 'id': 
       continue 
      key_line += ',{0}'.format(key) 
      values_line += ',{0}'.format(g[key]) 

    print key_line 
    print values_line 

這將輸出

id,key1,key2,key1,key2,key4 
1,value1,value2,value3,value4,value5 
id,key1,key2 
2,value3,value4 

...等

爲您的字典中的每個ID。我仍然不確定它是否是一個非常有用的輸出。您可能需要考慮重新組織您如何存儲數據的方式。