2012-10-17 133 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