有什么方法可以将元组用作架子中的钥匙? (蟒蛇)

时间:2009-09-27 02:24:31

标签: python shelve

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

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

但如果我用搁置试试:

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

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

有什么建议吗?

4 个答案:

答案 0 :(得分:7)

根据docs

  

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

我的重点:货架钥匙必须是字符串,句号。所以,你需要把你的元组变成一个str;根据你在元组中的含义,repr,某些separator.join,酸洗,编组等,可能会有效地用于此目的。

答案 1 :(得分:6)

如何使用元组的repr():

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

答案 2 :(得分:1)

如果您想拥有仲裁密钥,为什么不坚持使用词典?另一种选择是使用 repr str 方法在元组周围构建一个包装类,将其更改为字符串。我正在考虑一个库(对货架的自然反应) - 你的元组可以是Dewey decimal中的元素,而 str 会创建一个连续的完整表示。

答案 3 :(得分:0)

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

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

可在以下网址找到:https://github.com/North-Guard/simple_shelve