2009-09-27 8 views
5

Pythonのshelveモジュールを使ってタプル(1,2,3)をキーとして使いたいと思います。タプルを棚のキーとして使用する方法はありますか? (Python)

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

をしかし、私は棚でそれをしようとした場合::私は辞書でこれを行うことができます

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

私が手:

を "例外TypeError文字列またはキーのために期待されるIntegerオブジェクトを、タプルが見つかりました。"助言がありますか?

答えて

6

どのようにタプルののrepr()の使用方法について:

docs 1として
s[repr((1,2,3))] = 4 
7

the values (not the keys!) in a shelf can be essentially arbitrary Python objects

をマイ強調:棚キーが文字列、期間でなければなりません。だから、タプルをstrに変換する必要があります。タプルで何を持つかに応じて、reprseparator.join、酸洗い、マーシャリングなどが有益に採用されるかもしれません。

1

アライメントキーを使用したい場合は、なぜ辞書を使用しないのですか?他のオプションは、文字列にそれを変更するのreprまたはSTR方法であなたのタプルのラッパークラスを構築することです。私は、ライブラリ(棚に自然な反応)を考えています - あなたのタプルはDewey decimalの要素にすることができ、STRは、連結完全な表現を作成します。

0

これは古い質問かもしれませんが、同じ問題がありました。

私は、多くの場合、シェルフのを使用し、頻繁に文字列以外のキーを使用します。 shelf-modulesクラスをサブクラス化して、非文字列キーを自動的に文字列キーに変換し、照会すると元の形式に戻します。 Pythonの標準の不変オブジェクト(int、float、string、tuple、boolean)でうまく動作します。

https://github.com/North-Guard/simple_shelve

関連する問題