Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有比转换为字符串更好的方法在python中创建字典键?_Python_Dictionary_Key - Fatal编程技术网

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

有没有比转换为字符串更好的方法在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] 有没有比像这样连接向量更好的方法来创建键?字典键可以是任何东西;三个值的元组可以

我有一个函数,它返回与三维空间中的向量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 = 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))
对于将来的参考,第一行可以简化为to
key=“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,在这种情况下。