2012-06-08 71 views
1

我目前有一個詞典列表,其中詞典包含按類似關鍵字排序的列表。每個字典中的列表長度相同,但是從字典到字典各不相同,並且每個字典中都有相同數量的關鍵字。從多個詞典中提取到csv

dicts[file1] = {Header1:[1,2,3], Header2:[4,5,6],... etc} 
dicts[file2] = {Header1:[7,8,9,0], Header2:[4,3,7,7],... etc} 
... 
dicts[filen] = {...} 

我想提取列表的各兩名,字典(說「頭1」和「Header5」),並與該人名單填寫空格把它們放在一個.csv文件並排沒有其他人那麼長。

我幾乎100%確定要做到這一點,我想使用izip_longest,但我正在用izip_longest的正確格式來完成這一點。我想我的主要問題是我不知道應該把什麼放到*參數中來正確地循環。

任何幫助將不勝感激。

編輯:代碼的請求。

writefiel = open(somefile.csv, delimiter=',') 
xcolumn = 'Header1' 
ycolumn = 'Header5' 
for i in len(dicts): 
    for lines in izip_longest(*dicts[i][xcolumn], fillvalue=['']*2): 
     writefile.writerow([dicts[i][xcolumn],dicts[i][ycolumb]]) 

這只是行不通,但我一直在我的頭上格式化,並沒有能夠找出我不正確的做法。

csv輸出我想看起來像這樣。

Header1,Header5,Header1,Header5,Header1,Header5,... 
1,2,4,6,3,8... 
1,2,,,3,8,... 

答:

首先感謝大家給我一隻手。這是我結束了。如果你看到任何可以改善它的方式,我都會很喜歡聽到它,所以我可以提高自己的技能。

xhold =(list(izip_longest(*(d[xcolumn] for d in dicts), fillvalue=''))) 
yhold =(list(izip_longest(*(d[ycolumn] for d in dicts), fillvalue=''))) 

writefile.writerow([xcolumn, ycolumn, '']*len(xhold)) 
for i in range(len(xhold)): 
    row=[] 
    for j in range(len(xhold[i])): 
     row=row+[xhold[i][j],yhold[i][j],''] 
    writefile.writerow(row) 
+2

你可以發佈你到目前爲止嘗試過的代碼嗎? –

+2

你可以給我們一個輸出結果的樣本嗎? –

+0

我在原文中添加了一些編輯代碼。 – deadstump

回答

1

也許這樣?

import itertools 
itertools.izip_longest([1,2,3,4],[7,8]) 

lists_to_extract = ['Header1','Header2'] 
long_list_of_dicts = [{'Header1':[1,2,3], 'Header2':[4,5,6], 'Header3':[7,8,9]}, 
      {'Header1':[7,8,9,0], 'Header2':[4,3,7,7], 'Header3':[14,13,17,17]}] 

print [list(itertools.izip_longest(*(d[key] for d in long_list_of_dicts), 
      fillvalue=' ')) for key in lists_to_extract] 
#Output: 
[[(1, 7), (2, 8), (3, 9), (' ', 0)], [(4, 4), (5, 3), (6, 7), (' ', 7)]] 
+0

非常感謝您爲這種格式進行佈局。這不是我正在尋找的東西,但它指向了我正確的方向。謝謝! – deadstump

+0

哦,是的,我忘了補充說我把我的解決方案添加到了原文中。你真的可以看到你的影響力。再次感謝。 – deadstump