2012-10-17 162 views
0
from itertools import groupby 
#input 
l = [['Cautus B.V.', 'plein 92', '1129008', '10', 'AVB', 'Geachte mevrouw Daa', 'Mevrouw C.P. Daa'] , 
['Cautus B.V.', 'Wei 9-11', '1019123', '10', 'AVB', 'Geachte mevrouw Daa', 'Mevrouw C.P. Daa'] , 
['Cautus B.V.', 'plein 92', '1129008', '10', 'BEDR', 'Geachte mevrouw Daa', 'Mevrouw C.P. Daa'] , 
['Cautus B.V.', 'Wei 9-11', '1019123', '10', 'BEDR', 'Geachte mevrouw Daa', 'Mevrouw C.P. Daa'] , 
['De company', 'tiellaan 42', 'KD0022232', '13', 'AVB', 'Geachte heer Tigch', 'De heer I. Tigch'] , 
['De company', 'tiellaan 42', 'KD0022232', '13', 'DAS', 'Geachte heer Tigch', 'De heer I. Tigch'] , 
['Slever ', 'klopt 42', 'KD2220115', '17', 'AVB', 'Geachte heer Slever', 'De heer T. Slever']] 
#script 
l_clean = sorted(zip(zip(*l)[1], zip(*l)[4],)) 

l_final = [(k, zip(*v)[1]) for k,v in groupby(l_clean, key = lambda x:x[0])] 

for k,v in l_final: 

    print k,list(v) 

#My output is: 

Wei 9-11 ['AVB', 'BEDR'] 

klopt 42 ['AVB'] 

plein 92 ['AVB', 'BEDR'] 

tiellaan 42 ['AVB', 'DAS'] 

問題

我的問題是,我似乎無法到其他數據添加到輸出的數據我也想在輸出爲:添加額外的信息,以拉鍊

['Cautus B.V.','1019123', '10', 'Geachte mevrouw Daa', 'Mevrouw C.P. Daa'](not only for this entry but for all entry's) 

我嘗試了一切更改/添加密鑰等,但它似乎並沒有工作。 我知道我的英語含糊不清,所以如果我需要澄清一些詞或任何東西只是這樣說。 已經提前。

+2

你能嘗試解釋一下這個腳本應該做什麼嗎?我不知道你,但我發現像'l_clean = sorted(zip(zip(* l)[1],zip(* l)[4],))''有點稠密,所以它很多的工作,試圖解開所有這些以找出你正在嘗試的東西...... – mgilson

+0

是的,首先你必須看到AVB/DAS/BEDR是保險類型,並且每個地址都有保險。這些腳本在地址相同時尋找地址,它會生成地址並將保險組合在一起。我希望我通知你eneugh – sjeggiepop

回答

1

我有困難的時候理解你想要做什麼,但也許這將幫助:

from itertools import groupby 
import operator 
#input 
l = [['Cautus B.V.', 'plein 92', '1129008', '10', 'AVB', 'Geachte mevrouw Daa', 'Mevrouw C.P. Daa'] , 
['Cautus B.V.', 'Wei 9-11', '1019123', '10', 'AVB', 'Geachte mevrouw Daa', 'Mevrouw C.P. Daa'] , 
['Cautus B.V.', 'plein 92', '1129008', '10', 'BEDR', 'Geachte mevrouw Daa', 'Mevrouw C.P. Daa'] , 
['Cautus B.V.', 'Wei 9-11', '1019123', '10', 'BEDR', 'Geachte mevrouw Daa', 'Mevrouw C.P. Daa'] , 
['De company', 'tiellaan 42', 'KD0022232', '13', 'AVB', 'Geachte heer Tigch', 'De heer I. Tigch'] , 
['De company', 'tiellaan 42', 'KD0022232', '13', 'DAS', 'Geachte heer Tigch', 'De heer I. Tigch'] , 
['Slever ', 'klopt 42', 'KD2220115', '17', 'AVB', 'Geachte heer Slever', 'De heer T. Slever']] 
#script 
sortkey = operator.itemgetter(1,4) 
l_clean = sorted(l,key=sortkey) 

l_final = [(k, list(v)) for k,v in groupby(l_clean, key = operator.itemgetter(1))] 

for k,v in l_final: 
    info_rest = v[0][:4]+v[0][5:] 
    info_combine = map(operator.itemgetter(4),v) 
    print k,info_combine,info_rest 

基本上,我排序的所有基於特定的關鍵數據。這樣你就不會在排序階段丟失任何數據。然後我將groupby中的密鑰更改爲與新數據佈局一致並打印出結果。

+0

現在我得到雙輸入的是不是有可能得到這個輸出:魏9-11 ['AVB','BEDR'] +其他數據 klopt 42 ['AVB'] +其他數據 plein 92 ['AVB','BEDR'] +其他數據 tiellaan 42 ['AVB','DAS'] +其他數據對不起,發送垃圾郵件但我看起來似乎沒有解決這個問題 – sjeggiepop

+0

@ user1752643我的編輯有幫助嗎?爲了得到你的確切輸出,你可以做'v [0] [:4] + info_combine + v [0] [5:]'我想...... – mgilson