有什么方法可以在shelf中使用元组作为键吗?(Python)

5 投票
4 回答
1446 浏览
提问于 2025-04-15 14:37

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

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

但是如果我在shelve中尝试这样做:

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

我会得到一个错误:“TypeError: 期望是字符串或整数作为键,结果却找到了元组”

有什么建议吗?

4 个回答

1

如果你想要使用任意的键,为什么不直接用字典呢?另外一个选择是创建一个包装类,把你的元组包裹起来,并添加一个reprstr方法,这样就可以把它转换成字符串。我在想一个库(自然响应于货架)——你的元组可以作为杜威十进制中的元素,而str方法则可以生成一个完整的字符串表示。

7

根据文档

在一个shelf中,值(而不是键!)可以是任意的Python对象。

我想强调的是:shelf的键必须是字符串,没得说。所以,你需要把你的元组转换成字符串;根据你元组里的内容,可以使用repr、一些separator.join、序列化(pickling)、或者其他方法来实现这个转换。

8

可以试试用元组的 repr() 方法:

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

撰写回答