2009-09-27 5 views
5

파이썬에서 shelve 모듈을 사용하여 튜플 (1,2,3)을 키로 사용하고 싶습니다.튜플을 선반의 키로 사용하는 방법은 무엇입니까? (Python)

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

을하지만 선반에 그것을 시도하는 경우 : 나는 사전을 사용하여이 작업을 수행 할 수

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

내가 얻을 :

: "형식 오류 문자열 또는 키 예상 Integer 객체가 튜플 발견" 어떤 제안?

답변

6

어떻게 튜플의에 repr() 사용에 대한 :

docs으로 당
s[repr((1,2,3))] = 4 
7

,

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

내 강조 : 선반 키 문자열, 기간이어야합니다. 따라서 튜플을 str으로 변환해야합니다. 튜플에 무엇을 가지고 있을지에 따라 repr, 일부 separator.join, 산세, 마샬링 등이 유익하게 사용될 수 있습니다.

1

중재 키를 갖고 싶다면 왜 사전을 고집하지 않으시겠습니까? 또 다른 옵션은 대리자 또는 str 메서드를 사용하여 튜플 주위에 래퍼 클래스를 작성하여 문자열로 변경하는 것입니다. 라이브러리 (선반에 대한 자연스러운 응답)를 생각하고 있습니다. 튜플은 Dewey decimal의 요소가 될 수 있으며 str은 연결된 완전한 표현을 만듭니다.

0

이것은 오래된 질문 일 수 있지만 같은 문제가있었습니다.

저는 종종 shelve 's를 사용하며 자주 문자열이 아닌 키를 사용하려고합니다. shelf-modules 클래스를 선반에 하위 클래스 화하여 문자열이 아닌 키를 문자열 키로 자동 변환하고 쿼리 할 때 원래 형식으로 반환합니다. 파이썬의 표준 불변 객체 인 int, float, string, tuple, boolean에서 잘 작동합니다.

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

관련 문제