Python 如何找到双条目并将其变为密钥

Python 如何找到双条目并将其变为密钥,python,Python,我的剧本是这样的: 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 =

我的剧本是这样的:

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文件创建了一个dir

我的问题是,我需要制作一个脚本来过滤
riskadr
wei9-11
/
plein 92
/
tiellaan 42
)中的重复项,并添加
保险代码(
AVB
/
BEDR
/
DAS
),等等)将第二个副本的
riskard
与其他条目一起复制到新列表中的第一个

现在我们有两个条目具有相同的adr风险,如下所示:

['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']
但我想要一个scipt,从2个条目中创建1个条目,并将保险类型添加到第一个条目中,如下所示(AVB/DAS):


将它们保存为元组而不是列表,并将它们添加到集合中。。。如果这就是你所需要的

你可能需要这些东西。有一个内存数组(ultimatelist),在其中检查是否存在类似的列表。如果找到,请附加保险代码

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:]

您应该能够通过以下方式实现您的目标:

输出为:

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

请注意,您需要调整用于排序和分组的
功能,以便在输入不同于
l_clean
的情况下正常工作?!第一个问题队列中的人在投票前确实阅读了问题吗?你能澄清一下你期望的结果是什么吗?“De company”、“tiellaan 42”、“KD002232”、“13”、“AVB”、“DAS”、“Geachte heer Tigch”、“De heer I.Tigch”]而不是['De company'、'tiellaan 42'、'kd002232'、'13'、'AVB'、'Geachte heer Tigch'、'De heer I.Tigch']['De company'、'tiellaan 42'、'kd002232'、'13'、'DAS'、'Geachte heer Tigch'、'De heer I.Tigch']你可以用你的问题来澄清它。另外,如果有多个重复条目呢?如果您的条目以3或4个不同的保险代码结尾呢?每个风险地址(riskadr)都需要获得一份表格,表格中的QEUSTRIONS与该地址上的保险类型相匹配。风险地址(riskadr)无法获得2个BEDR保险。因此,我需要制作一个脚本,将2个风险ADR和2种保险类型变异为1个风险地址和保险地址。我得到一个包含2200行公司地址的.csv文件,我无法添加单个地址。我没有复式输入的问题,我需要将2个风险地址变异为1个2确保风险地址是的,但是每年公司的地址都会改变,所以你不能用python做一个更中立的选项,它自动搜索这些条目吗?不管名称是什么?这是你能找到的最中立的选项…它搜索数据库中的每个重复条目并删除重复条目。基于你的问题,上面的评论和这里的评论,你问了3个不同的问题…如果你需要消除重复,这是你能找到的最快的选择…如果你需要更多的东西,编辑你的问题并更好地澄清你需要什么我用一个例子编辑了我的问题希望你现在明白了(抱歉我的英语含糊不清)mooeep我是否需要在脚本中添加所有条目,因为我得到了2200个条目的列表?我不能只添加列表吗?@user1752643如果您只在其中插入其他元素,可能会使解析列表变得不可能。您可以用另一个能够容纳尽可能多的
insurence的列表替换字符串
insurencecode
代码
s如您所愿。如果我使用导入函数并返回结果(列表)到函数中,然后用上面的脚本创建另一个函数,并将结果添加到另一个函数中,我不需要手动添加所有条目吗?@user1752643这不是一个论坛。在这里,您发布了一个问题,希望得到回答(在这种情况下,您接受答案)如果你还有更多的问题,首先试着自己解决,最后你可以发布更多的问题。对不起,我很高兴有人能帮助我,但这对我帮助很大
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:]
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']