【发布时间】:2017-05-25 23:51:52
【问题描述】:
我有一个大的 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]']
【问题讨论】:
-
您期望的重复次数是多少? 10% 是重复的,还是列表的 50% 或 90% 是重复的?
-
@AustinHastings 介于 15-60% 之间
-
最高效的处理方式还是内存方式?你必须做出权衡......
-
@zwer 处理明智。
-
也许把它们放到数据库里,让SQL来处理?