我想使用 Python 中的搁置模块将元组 (1,2,3) 作为键。我可以用字典做到这一点:
d = {}
d[(1,2,3)] = 4
但如果我用搁置尝试:
s = shelve.open('myshelf')
s[(1,2,3)] = 4
我得到:“TypeError:键需要字符串或整数对象,找到元组”
有什么建议么?
如何使用元组的 repr():
s[repr((1,2,3))] = 4
根据文档,
架子中的值(不是键!)本质上可以是任意 Python 对象
我的重点:架子键必须是字符串,句号。所以,你需要把你的元组变成一个str;根据您在元组中的内容,可能会为此目的有效地使用repr
some 、酸洗、编组等。separator.join
如果您想拥有任意键,为什么不坚持使用字典?另一种选择是使用repr或str方法围绕您的元组构建一个包装类,以将其更改为字符串。我正在考虑一个库(对书架的自然响应) - 您的元组可以是杜威十进制中的元素,而str创建一个连接的完整表示。
这可能是一个老问题,但我遇到了同样的问题。
我经常使用搁置,并且经常想使用非字符串键。我将 shelve-modules 类子类化为一个架子,该架子会自动将非字符串键转换为字符串键,并在查询时以原始形式返回它们。它适用于 Python 的标准不可变对象:int、float、string、tuple、boolean。