我希望能够比对两个长度不同的字典形式的大量数据。
我们需要获得的答案是5065:[0.80861318111419678,0.76381617784500122]。这是因为我们只比较值而不涉及索引。
我只是使用这个键-值对来记住数据的顺序。如果需要,数据类型可以替换为列表/集合。我需要找到那些不共同存在于字典中的元素的键:值(索引和值)对。
我正在使用非常简单的代码...
post = {0: [0.96180319786071777, 0.37529754638671875],
10: [0.20612385869026184, 0.17849941551685333],
20: [0.20612400770187378, 0.17510984838008881],...}
pre = {0: [0.96180319786071777, 0.37529754638671875],
1: [0.20612385869026184, 0.17849941551685333],
2: [0.20612400770187378, 0.17510984838008881],
5065: [0.80861318111419678, 0.76381617784500122],...}
我们需要获得的答案是5065:[0.80861318111419678,0.76381617784500122]。这是因为我们只比较值而不涉及索引。
我只是使用这个键-值对来记住数据的顺序。如果需要,数据类型可以替换为列表/集合。我需要找到那些不共同存在于字典中的元素的键:值(索引和值)对。
我正在使用非常简单的代码...
new = {}
found = []
for i in range(0, len(post)):
found= []
for j in range(0, len(pre)):
if post[i] not in pre.values():
if post[i] not in new:
new[i] = post[i]
found.append(j)
break
if found:
for f in found: pre.pop(f)
new {} 包含我需要的元素。
我面临的问题是这个过程太慢了。有时需要超过一个小时的时间来处理数据。有时数据可以更大。我需要它更快。
是否有一种有效的方法来实现我的目标?如果可能的话,我希望我们不依赖除了Python 2.5(64位)捆绑的包之外的其他外部包。
谢谢大家。
0.0
或1.0
可能会出现问题。它也不尊重索引,当pre = { 0 : tup_a, 1 : tup_b}
和post = { 0 : tup_b, 1 : tup_a}
时,它会认为它们是相等的。如果必须解决这些问题,可以使用 3 元组,例如(a,b,index)
或具有__hash__
和__eq__
的自定义对象。 - Jochen Ritzel