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