2009-09-27 26 views
5

Tôi muốn sử dụng một bộ tuple (1,2,3) làm khóa sử dụng mô-đun trong Python. Tôi có thể làm điều này với các từ điển:Bất kỳ cách nào để sử dụng một tuple làm khóa trong giá? (Python)

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

Nhưng nếu tôi thử nó với xiên:

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

tôi nhận được: "Lỗi Loại: String hoặc đối tượng Integer dự kiến ​​cho khóa, tuple tìm thấy"

Bất kỳ đề xuất?

Trả lời

6

Làm thế nào về việc sử dụng repr() của tuple:

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

Theo docs,

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

My nhấn mạnh: Phím kệ phải là các chuỗi, thời gian. Vì vậy, bạn cần phải biến tuple của bạn thành một str; tùy thuộc vào những gì bạn sẽ có trong tuple, repr, một số separator.join, tẩy, marshaling, vv, có thể được sử dụng hiệu quả cho mục đích đó.

1

Tại sao không dính với từ điển nếu bạn muốn có các phím trọng tài? Tùy chọn khác là tạo lớp bao bọc xung quanh bộ đồ của bạn bằng phương thức repr hoặc str để thay đổi thành chuỗi. Tôi đang nghĩ về một thư viện (phản ứng tự nhiên với các kệ) - bộ đồ của bạn có thể là các phần tử trong số Dewey decimalstr tạo ra một biểu diễn hoàn chỉnh nối.

0

Đây có thể là một câu hỏi cũ, nhưng tôi có cùng một vấn đề.

Tôi thường sử dụng giá đỡ và thường xuyên muốn sử dụng các phím không phải chuỗi. Tôi phân lớp lớp mô-đun được xếp lớp thành một giá để tự động chuyển đổi các khóa không phải chuỗi thành các khóa chuỗi và trả về chúng dưới dạng gốc khi được truy vấn. Nó hoạt động tốt cho các đối tượng bất biến tiêu chuẩn của Python: int, float, string, tuple, boolean.

Nó có thể được tìm thấy trong: https://github.com/North-Guard/simple_shelve

Các vấn đề liên quan