有没有更好的方法在python中创建字典键而不是转换为字符串?

时间:2014-06-23 09:38:15

标签: python dictionary key

我有一个函数可以返回与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]

创建密钥是否有更好的方法,而不是加入像这样的向量?

2 个答案:

答案 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

相关问题