有什么方法可以在shelf中使用元组作为键吗?(Python)
我想在Python中使用一个元组(1,2,3)作为键,利用shelve模块。我可以在字典中做到这一点:
d = {}
d[(1,2,3)] = 4
但是如果我在shelve中尝试这样做:
s = shelve.open('myshelf')
s[(1,2,3)] = 4
我会得到一个错误:“TypeError: 期望是字符串或整数作为键,结果却找到了元组”
有什么建议吗?
4 个回答
1
如果你想要使用任意的键,为什么不直接用字典呢?另外一个选择是创建一个包装类,把你的元组包裹起来,并添加一个repr或str方法,这样就可以把它转换成字符串。我在想一个库(自然响应于货架)——你的元组可以作为杜威十进制中的元素,而str方法则可以生成一个完整的字符串表示。
7
根据文档,
在一个shelf中,值(而不是键!)可以是任意的Python对象。
我想强调的是:shelf的键必须是字符串,没得说。所以,你需要把你的元组转换成字符串;根据你元组里的内容,可以使用repr
、一些separator.join
、序列化(pickling)、或者其他方法来实现这个转换。
8
可以试试用元组的 repr() 方法:
s[repr((1,2,3))] = 4