<p>希望这能给你一个好的开始。我刚刚调用了文件<code>file1</code>和<code>file2</code>。很有创意,我知道。你知道吗</p>
<pre><code>import random
f1_dict = {}
f2_dict = {}
match_dict = {}
match_threshold = .05
matches_to_return = 2
skip_unmatched = True
isfirstline = True
for line in open("file1"):
if isfirstline:
isfirstline = False
continue
f1_dict[line.split()[0]] = line.split()[1]
isfirstline = True
for line in open("file2"):
if isfirstline:
isfirstline = False
continue
f2_dict[line.split()[0]] = line.split()[3]
for i in f1_dict:
compare_rsID = i
compare_val = f1_dict[i]
temp_list = []
for j in f2_dict:
if abs(float(f2_dict[j]) - float(compare_val)) <= match_threshold:
temp_list.append(j)
match_dict[i] = temp_list
fo = open("output.txt", "wb")
for k in match_dict:
if skip_unmatched and len(match_dict[k]) == 0:
continue
else:
random.shuffle(match_dict[k])
fo.write(k),
for l in match_dict[k][:matches_to_return]:
fo.write(" ")
fo.write(l),
fo.write("\n")
</code></pre>
<p>我确信这可以提高效率。它在第二个dict中循环的次数与第一个dict中索引的循环次数相同。此外,我还将匹配数设置为返回2,以便使用问题中的小数据集进行测试。你可以做5000块或者其他你喜欢的。列表中的元素不是随机化的,但我也没有在列表的自然构建之外强加任何顺序。(编辑:不再是真的。。。我还对匹配阈值进行了变量化,以防您想稍微研究一下其他值。你知道吗</p>