我在内存中有一个字典,其格式如下:
value_refs[tuple([a,b])] = some float value
字典是4000个引用值的所有可能组合的池,以前计算过(数百万)。 例如:
...
value_refs[1,4] =0,76543
value_refs[1,5] =0,89734 #i want this value, since it is the bigger of all the second ref's,
# related with the ref. 1 (first tuple in the key)
...
value_refs[1,4000] =0,77543
...
...
value_refs[4000,30] =0,76543
value_refs[4000,31] =1,89734 # I want this value, since it is the bigger of all the second
# references, related with the ref. 4000 (first tuple in the key)
value_refs[4000,32] =0,77543
问题在于我不知道如何以与'组合'相同的模式对整个字典键进行循环,将它们用作迭代,如:
asymptote=0
cache=[]
pool_chain={}
for c in value_refs.keys()[c][0]: # [0] because i need the first tuple value of the key, by rank
for d in value_refs.keys()[d][1]: # [1] because i need a loop over the range of all the second
#tuple values in the dict pool, versus the outer loop
while True:
try:
if value_refs[c,d] > asymptote:
cache=[c,d]
asymptote=value_refs[c,d]
except KeyError:
pass
except StopIteration:
pool_chain[cache]=asymptote
asymptote=0
#and now c would advance by an ordered rank intil the number 4000...
我知道上面的代码不起作用,因为语法错误但我认为这是发布问题的最佳方式。 python中字典的无序性质(我认为)是一个问题,嵌套循环按顺序处理2元组密钥,如1,2,3,3 ...... 1,4000 2,3 2,4等等。如何以有序的方式(按排名)迭代我的字典在内存中,并提取2元组键和键中第二个值的最大值与相同键中的第一个元组值,这适用于所有组合?提前谢谢。
答案 0 :(得分:0)
具有4000 * 4000元素的2D阵列怎么样?占用较少的内存,比这样的字典更快。特别是,如果你有所有可能的组合。
查看Numpy。
import numpy as np
arr = np.empty((4000,4000))
for i, a in enumerate([...]):
for j, b in enumerate([...]):
arr[i, j] = ...
...
for i in arr.shape[0]:
for j in arr.shape[1]:
... arr[i, j]
答案 1 :(得分:0)
我认为您要做的是收集每个唯一密钥对的第一个值的最大值。
这是一种方法:
from collections import defaultdict
all_values = defaultdict(list)
keys = value_refs.keys()
for k in keys:
all_values[k[0]].append(value_ref[k])
for k,v in all_values.iteritems():
print i,max(v)