我在Python中寻找类似于字典的数据结构。不同之处在于有两个键。我希望能够在恒定时间内访问该值。 像:
dict.get(dog, smurf)
{(dog, smurf): 40}
这可能吗?
如果这不存在,我只会在字典中做一本字典。但是,上面会更方便。
{dog: {(smurf: 40)}}
答案 0 :(得分:13)
什么阻止了你?
d = {(dog, smurf): 40}
print d[(dog, smurf)] # 40
答案 1 :(得分:3)
除非我误解了某些内容,否则你可以使用正常的dict索引与元组。如果密钥都是可清除的,则(不可变的)元组将是可清除的,并且可以用作dict密钥。
>>> d = {('dog', 'smurf'): 123}
>>> d[('dog', 'smurf')]
123
>>> d.get(('dog', 'smurf'))
123
如果确实希望在没有重复括号的情况下使用d.get
,则继承dict
并覆盖get
方法和/或{{1} ,使用元组打包/解包。但如果你不需要这么做,就不要这样做。
答案 2 :(得分:3)
我不太明白你的例子。你的意思是这样的吗?
>>> dog = 'dog'
>>> smurf = 'smurf'
>>> d = {(dog, smurf): 40}
>>> d[(dog, smurf)]
40
元组是不可变的,如果它们包含的对象也是不可变的,那么它们也可以用作字典键。
但是如果你将一个可变对象分配给dog
,它将不起作用:
>>> dog = ['d', 'o', 'g']
>>> d[(dog, smurf)]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
答案 3 :(得分:3)
你不需要parens:
>>> d = {}
>>> d['jim', 'joe'] = 7
>>> d['jim', 'joe']
7
>>> d
{('jim', 'joe'): 7}
Puples不是由parens表示的。它们用逗号表示。有时只需要消除歧义。