有没有办法将元组用作工具架中的键?(Python)

有没有办法将元组用作工具架中的键?(Python),python,shelve,Python,Shelve,我想使用Python中的shelve模块使用元组(1,2,3)作为键。我可以用字典做到这一点: d = {} d[(1,2,3)] = 4 但如果我尝试使用shelve: s = shelve.open('myshelf') s[(1,2,3)] = 4 我得到:“TypeError:键需要字符串或整数对象,找到元组” 有什么建议吗 使用元组的repr()如何: s[repr((1,2,3))] = 4 根据, 工具架中的值(不是键!) 基本上可以是任意的Python 物体 我的重点是:书

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

d = {}
d[(1,2,3)] = 4
但如果我尝试使用shelve:

s = shelve.open('myshelf')
s[(1,2,3)] = 4
我得到:“TypeError:键需要字符串或整数对象,找到元组”

有什么建议吗

使用元组的repr()如何:

s[repr((1,2,3))] = 4
根据,

工具架中的值(不是键!) 基本上可以是任意的Python 物体


我的重点是:书架键必须是字符串,句号。因此,您需要将元组转换为str;根据元组中的内容,
repr
,一些
分隔符。join
、pickle、marshall等可以有效地用于此目的。

如果想要任意键,为什么不使用字典呢?另一个选项是使用reprstr方法围绕元组构建包装器类,将其更改为字符串。我正在考虑一个库(对书架的自然响应)-您的元组可以是中的元素,str创建一个串联的完整表示。

这可能是一个老问题,但我有同样的问题

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

可在以下网址找到: