5

Pythonのshelveモジュールを使用して、キーとしてタプル(1,2,3)を使用したいと思います。私は辞書でこれを行うことができます:

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

しかし、私が棚でそれを試してみると:

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

「TypeError:キーに文字列または整数オブジェクトが必要です。タプルが見つかりました」

助言がありますか?

4

4 に答える 4

8

タプルのrepr()を使用するのはどうですか?

s[repr((1,2,3))] = 4
于 2009-09-27T02:30:28.120 に答える
7

ドキュメントによると、

シェルフの値(キーではありません!)は、基本的に任意のPythonオブジェクトにすることができます

私の強調:棚の鍵は文字列、ピリオドでなければなりません。したがって、タプルをstrに変換する必要があります。タプルに何を入れるかによってはreprseparator.joinピクルス、マーシャリングなどがその目的のために実りある形で使用される場合があります。

于 2009-09-27T02:41:22.673 に答える
1

任意のキーが必要な場合は、辞書を使用しないでください。もう 1 つのオプションは、 reprまたはstrメソッドを使用してタプルの周りにラッパー クラスを構築し、文字列に変更することです。私はライブラリを考えています(シェルフへの自然な応答)-タプルはデューイ10進数の要素にすることができ、strは連結された完全な表現を作成します。

于 2009-09-27T03:24:21.977 に答える