Python 中的高效重复数据删除

Efficient deduplication in Python

我已经编写了一些代码,它为列表的每个元素赋予一个分数...为此,我需要这样做(简化代码):

group={1:["Jack", "Jones", "Mike"],
       2:["Leo", "Theo", "Jones", "Leo"],
       3:["Tom", "Jack"]}

already_chose=["Tom","Mike"]
result=[]

for group_id in group:
    name_list = group[group_id]
    y=0;x=0
    repeat=[]
    for name in name_list:
        if name in already_chose:
            y+=1
        elif name not in repeat:
            x+=1
            repeat.append(name)
    score_group=x-y
    result.append([group_id,score_group])

输出:[[1, 1], [2, 3], [3, 0]]

问题是,如果您阅读这段代码,它没有针对大型枚举进行优化(超过 7000 个组和 100 个组名)...

我希望有人能帮助我?非常感谢

IIUC,你想得到不在already_chose中的唯一名称集的长度减去already_chose中的名称数。

这很容易通过 python 集和列表理解来实现。使用 python 集的优点是,由于元素的散列,操作速度非常快。

[[k, len(set(v).difference(already_chose))-len(set(v).intersection(already_chose))]
 for k,v in group.items()]

输出:[[1, 1], [2, 3], [3, 0]]

注意。作为字典理解可能更有用:

{k: len(set(v).difference(already_chose))-len(set(v).intersection(already_chose))
 for k,v in group.items()}

输出:{1: 1, 2: 3, 3: 0}