0

私のスクリプトはこれです:

import csv
with open('lees.csv','rU') as naver:

    reader = csv.DictReader (naver)
    for alist in reader:
        name = alist["naam"]
        polisnumber = alist["polisnr"]
        riskadr = alist["risico adr"]
        insurencecode = alist["branchecode"]
        relationnumber = alist["rel"]
        header = alist["aanhef"]
        tav = alist["tav"]
        thelist = [name,riskadr,polisnumber,
                  relationnumber,insurencecode,header,tav]

スクリプトの出力は次のとおりです。

['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']

ご覧のとおり、.csv ファイルからディレクトリを作成しました。

私の問題は、( / / ) の重複をフィルター処理し、2 番目の重複の ( / / など) を新しいリストの最初の重複に他のエントリと共に追加するスクリプトriskadrwei 9-11作成plein 92する必要があることですtiellaan 42insurencecodeAVBBEDRDASriskadr

したがって、次のような同じリスク adr を持つ 2 つのエントリがあります。

['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']

But i want a scipt that makes 1 entry from that 2 entry's with the insurence type added to the first 1 like this(AVB/DAS):

['De company', 'tiellaan 42', 'KD0022232', '13', 'AVB','DAS', 'Geachte heer Tigch', 'De heer I. Tigch']
4

3 に答える 3

1

itertools.groupbyを使用して目標を達成できるはずです。

from itertools import groupby

# define 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']]

# remove clutter
l_clean = [(x[1], x[4]) for x in l]

# sort (groupby requires input to be sorted)
l_sorted = sorted(l_clean)

# group by first column
l_final = [(k, zip(*v)[1]) for k,v in groupby(l_sorted, key=lambda x:x[0])]

# print output
for k,v in l_final: 
    print k, list(v)

出力は次のとおりです。

Wei 9-11 ['AVB', 'BEDR']
klopt 42 ['AVB']
plein 92 ['AVB', 'BEDR']
tiellaan 42 ['AVB', 'DAS']

keyとは異なる入力で意図したとおりに動作するように、並べ替えとグループ化に使用される関数を適合させる必要があることに注意してくださいl_clean

于 2012-10-17T10:05:28.933 に答える
0

あなたはおそらくこれらの線に沿って何かが必要です。類似のリストの存在を確認するメモリ内配列(究極のリスト)を用意します。見つかった場合は、保険コードを追加します

def search(item, array):
    for i in range(len(array)):
        # if first four elements and last two elements are identical
        if array[i][:4] == item[0:4] and array[i][-2:] == item[-2:]:
            return i
    return -1

index = search(thelist, ultimatelist):
if index > 0:
    ultimatelist[index] = ultimatelist[index][:4] + thelist[4] + ultimatelist[index][4:]
于 2012-10-17T10:02:45.380 に答える