gpt4 book ai didi

python - 有效识别大型列表(500,000+)中的重复项

转载 作者:太空宇宙 更新时间:2023-11-04 09:59:50 25 4
gpt4 key购买 nike

我有一个很大的 DOI 列表,我需要最有效的方法来识别重复的 DOI(即打印出索引和重复值的 DOI。)DOI 数组可能包含 500,000 + DOI 的。我目前的做法是这样的(inspired by this answer):

from collections import defaultdict
D = defaultdict(list)
for i,item in enumerate(doiList):
D[item].append(i)
D = {k:v for k,v in D.items() if len(v)>1}
print (D)

是否有更高效的处理方式?

示例 DOI 列表:

doiList = ['10.1016/j.ijnurstu.2017.05.011 [doi]','10.1016/j.ijnurstu.2017.05.011 [doi]' ,'10.1167/iovs.16-20421 [doi]', '10.1093/cid/cix478 [doi]', '10.1038/bjc.2017.133 [doi]', '10.3892/or.2017.5646 [doi]', '10.1177/0961203317711009 [doi]', '10.2217/bmm-2017-0087 [doi]', '10.1007/s12016-017-8611-x [doi]', '10.1007/s10753-017-0594-5 [doi]', '10.1186/s13601-017-0150-2 [doi]', '10.3389/fimmu.2017.00515 [doi]', '10.2147/JAA.S131506 [doi]', '10.2147/JAA.S128431 [doi]', '10.1038/s41598-017-02293-z [doi]', '10.18632/oncotarget.17729 [doi]', '10.1073/pnas.1703683114 [doi]', '10.1096/fj.201600857RRR [doi]', '10.1128/AAC.00020-17 [doi]', '10.1016/j.jpain.2017.04.011 [doi]', '10.1016/j.jaip.2017.04.029 [doi]', '10.1016/j.anai.2017.04.021 [doi]', '10.1016/j.alit.2017.05.001 [doi]']

最佳答案

尝试将它们存储在 set 中反而。您可以将重复项附加到一个列表中,这可能会加快速度:

seen = set()
dupes = []

for i, doi in enumerate(doiList):
if doi not in seen:
seen.add(doi)
else:
dupes.append(i)

此时,seen 包含所有不同的 doi 值,而 dupes 包含所有重复值的第 2、3 等索引。您可以在 doiList 中查找它们以确定哪个索引对应于哪个值。

要从中获得更多性能,您可以缓存这些方法:

seen = set()
seen_add = seen.add
dupes = []
dupes_append = dupes.append

for i, doi in enumerate(doiList):
if doi not in seen:
seen_add(doi)
else:
dupes_append(i)

关于python - 有效识别大型列表(500,000+)中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44191465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com