我有一个函数可以返回与3D空间中的矢量相关的能量,F(i,j,k)。
F()是一个慢函数,所以我有一个字典来检查是否为特定的i,j,k调用了F(),如果有,那么我只是从字典中取出该值。
我目前正在这样做:
key = "_".join( [ str(i), str(j), str(k) ])
if key not in dic:
dic[key] = F(i,j,k)
Energy = dic[key]
创建密钥是否有更好的方法,而不是加入像这样的向量?
答案 0 :(得分:8)
字典键可以是任何hashable ; 3个值的元组很好:
key = i, j, k # a comma makes this a tuple
try:
Energy = dic[key]
except KeyError:
Energy = dic[key] = F(i, j, k)
我在这里使用异常处理(要求宽恕),而不是明确测试密钥是否存在(请求权限);当缺少关键是关键是常态时,前者更快。
答案 1 :(得分:1)
由于Python dicts可以将任何 hashable 对象作为键[1],因此您可以使用(i, j, k)
元组:
if (i, j, k) not in dic:
dic[(i, j, k)] = F(i,j,k)
Energy = dic[(i, j, k)]
[1] https://docs.python.org/2/library/stdtypes.html#mapping-types-dict