元组值按键

时间:2012-01-04 17:30:54

标签: python tuples

是否可以从元组中获取Value:

TUPLE = (
    ('P', 'Shtg1'),
    ('R', u'Shtg2'),
    ('D', 'Shtg3'),
)

调用STR键,如P

Python说只有int可以用于这种类型的'查询'

我不能使用循环(太多开销......)

谢谢!

5 个答案:

答案 0 :(得分:46)

此类查询的规范数据结构是字典:

In [1]: t = (
   ...:     ('P', 'Shtg1'),
   ...:     ('R', u'Shtg2'),
   ...:     ('D', 'Shtg3'),
   ...: )

In [2]: d = dict(t)

In [3]: d['P']
Out[3]: 'Shtg1'

如果使用元组,则无法避免循环(显式或隐式)。

答案 1 :(得分:8)

您想要使用字典。

d = { 'P': 'Shtg1', 'R': u'Shtg2', 'D':'Shtg3' }

然后您可以像这样访问密钥:

d['P'] # Gets 'Shtg1'

答案 2 :(得分:6)

您可以尝试使用named tuple而不是转到完整词典。有关详情,请参见this question

基本上你为字段定义标签,然后能够将它们称为value.tag1等。

引用文档:

  

命名的元组实例没有每个实例的字典,所以它们   是轻量级的,不需要比常规元组更多的内存。

答案 3 :(得分:6)

dict(TUPLE)[key]会做你想做的事。

有一点内存开销,但速度很快。

答案 4 :(得分:3)

用python shell中的一些代码详细说明Eduardo的答案。

>>> from collections import namedtuple
>>> MyType = namedtuple('MyType', ['P', 'R', 'D'])
>>> TUPLE = MyType(P='Shtg1', R=u'Shtg2', D='Shtg3')
>>> TUPLE
MyType(P='Shtg1', R=u'Shtg2', D='Shtg3')

>>> TUPLE.P
'Shtg1'

>>> TUPLE.R
u'Shtg2'

>>> TUPLE.D
'Shtg3'

>>> TUPLE[0:]
('Shtg1', u'Shtg2', 'Shtg3')

请记住,元组是不可变的,字典是可变的。如果你想要不可变类型,namedtuple可能就是你的选择。