5

我想使用 Python 中的搁置模块将元组 (1,2,3) 作为键。我可以用字典做到这一点:

d = {}
d[(1,2,3)] = 4

但如果我用搁置尝试:

s = shelve.open('myshelf')
s[(1,2,3)] = 4

我得到:“TypeError:键需要字符串或整数对象,找到元组”

有什么建议么?

4

4 回答 4

8

如何使用元组的 repr():

s[repr((1,2,3))] = 4
于 2009-09-27T02:30:28.120 回答
7

根据文档

架子中的值(不是键!)本质上可以是任意 Python 对象

我的重点:架子键必须是字符串,句号。所以,你需要把你的元组变成一个str;根据您在元组中的内容,可能会为此目的有效地使用reprsome 、酸洗、编组等。separator.join

于 2009-09-27T02:41:22.673 回答
1

如果您想拥有任意键,为什么不坚持使用字典?另一种选择是使用reprstr方法围绕您的元组构建一个包装类,以将其更改为字符串。我正在考虑一个库(对书架的自然响应) - 您的元组可以是杜威十进制中的元素,而str创建一个连接的完整表示。

于 2009-09-27T03:24:21.977 回答
0

这可能是一个老问题,但我遇到了同样的问题。

我经常使用搁置,并且经常想使用非字符串键。我将 shelve-modules 类子类化为一个架子,该架子会自动将非字符串键转换为字符串键,并在查询时以原始形式返回它们。它适用于 Python 的标准不可变对象:int、float、string、tuple、boolean。

它可以在以下位置找到:https ://github.com/North-Guard/simple_shelve

于 2017-08-27T09:39:13.957 回答