我正在尝试通过计算匹配元素的数量来比较一个集合与集合中所有其他集合的相似度。一旦我获得了计数,我想针对具有最高计数的前X个(目前为100个)相似集合(具有最高计数的集合)执行进一步操作。 我提供了一个示例输入和输出,其中显示了两个集合之间匹配元素的计数:
输入
{
"list1": [
"label1",
"label2",
"label3"
],
"list2": [
"label2",
"label3",
"label4"
],
"list3": [
"label3",
"label4",
"label5"
],
"list4": [
"label4",
"label5",
"label6"
]
}
输出
{
"list1": {
"list1": 3,
"list2": 2,
"list3": 1,
"list4": 0
},
"list2": {
"list1": 2,
"list2": 3,
"list3": 2,
"list4": 1
},
"list3": {
"list1": 1,
"list2": 2,
"list3": 3,
"list4": 2
},
"list4": {
"list1": 0,
"list2": 1,
"list3": 2,
"list4": 3
}
}
我想到以下代码,但对于大约200,000组输入需要数小时才能运行完成。每个组中元素/标签的数量有所不同,但每个组平均约有10个元素。唯一标签值的总数约为300个。
input = {}
input['list1'] = ['label1', 'label2', 'label3']
input['list2'] = ['label2', 'label3', 'label4']
input['list3'] = ['label3', 'label4', 'label5']
input['list4'] = ['label4', 'label5', 'label6']
print(json.dumps(input, indent=2))
input = {key: set(value) for key, value in input.items()}
output = {key1: {key2: 0 for key2 in input.keys()} for key1 in input.keys()}
for key1, value1 in input.items():
for key2, value2 in input.items():
for element in value1:
if element in value2:
count = output[key1][key2]
output[key1][key2] = count + 1
print(json.dumps(output, indent=2))
当集合的数量比较大时,有没有任何想法可以提高以上代码的执行时间?
感谢任何建议!