有没有比转换为字符串更好的方法在python中创建字典键?
我有一个函数,它返回与三维空间中的向量F(I,j,k)相关联的能量 F()是一个慢函数,所以我有一个字典,它检查是否为特定的I,j,k调用了F(),如果调用了,我就从字典中取那个值 我目前的工作是:有没有比转换为字符串更好的方法在python中创建字典键?,python,dictionary,key,Python,Dictionary,Key,我有一个函数,它返回与三维空间中的向量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] 有没有比像这样连接向量更好的方法来创建键?字典键可以是任何东西;三个值的元组可以
key = "_".join( [ str(i), str(j), str(k) ])
if key not in dic:
dic[key] = F(i,j,k)
Energy = dic[key]
有没有比像这样连接向量更好的方法来创建键?字典键可以是任何东西;三个值的元组可以很好地执行以下操作:
key = i, j, k # a comma makes this a tuple
try:
Energy = dic[key]
except KeyError:
Energy = dic[key] = F(i, j, k)
我在这里使用异常处理(请求原谅),而不是显式测试密钥是否存在(请求许可);如果没有键,则前者速度更快,因为键是标准键。字典键可以是任何东西;三个值的元组可以很好地执行以下操作:
key = i, j, k # a comma makes this a tuple
try:
Energy = dic[key]
except KeyError:
Energy = dic[key] = F(i, j, k)
我在这里使用异常处理(请求原谅),而不是显式测试密钥是否存在(请求许可);如果没有键,则前者的速度更快,因为键是标准键。由于Python dicts可以将任何可哈希对象作为键[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] 由于Python dicts可以将任何可散列对象作为键[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] 对于将来的参考,第一行可以简化为to
key=“979;”。join(map(str,(i,j,k))
对于将来的参考,第一行可以简化为tokey=“979;”。join(map(str,(i,j,k))
我使用shelve来存储我的词典。显然,这对元组作为键不起作用。pickle是下一个最佳选择吗?@egoburnswell:shelve
使用pickle作为实现。元组键应该与shelve配合使用;您看到的错误是什么?'TypeError:String或Integer对象应为key,tuple found'@egoburnswell:My抱歉,我确实看到shelve
被记录为仅接受字符串作为键。这是因为这些值是经过Pickle处理的,但这些值随后存储在中,正是这种格式限制了键的使用。@egoburnswell:要么将字典嵌套在shelve
(shelveobj['data']=yourdict
,确保在更改时重新指定给该键)要么只使用Pickle,那样的话,我用书架来存放我的字典。显然,这对元组作为键不起作用。pickle是下一个最佳选择吗?@egoburnswell:shelve
使用pickle作为实现。元组键应该与shelve配合使用;您看到的错误是什么?'TypeError:String或Integer对象应为key,tuple found'@egoburnswell:My抱歉,我确实看到shelve
被记录为仅接受字符串作为键。这是因为这些值是经过Pickle处理的,但是这些值随后被存储在中,并且正是这种格式限制了您的键。@egoburnswell:要么将字典嵌套在shelve
(shelveobj['data']=yourdict
,确保在更改时重新指定给该键)要么仅使用Pickle,在这种情况下。