关于python:tuple value by key

Tuple value by key

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

1
2
3
4
5
TUPLE = (
    ('P', 'Shtg1'),
    ('R', u'Shtg2'),
    ('D', 'Shtg3'),
)

通过调用像P这样的str键

python说只有int可以用于这种类型的"查询"

我不能使用循环(开销太大…)

谢谢您!


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

1
2
3
4
5
6
7
8
9
10
In [1]: t = (
   ...:     ('P', 'Shtg1'),
   ...:     ('R', u'Shtg2'),
   ...:     ('D', 'Shtg3'),
   ...: )

In [2]: d = dict(t)

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

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


你想用字典来代替。

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

然后你可以像这样进入钥匙:

1
d['P'] # Gets 'Shtg1'


您可以尝试使用命名的元组来代替移动到完整的词典。有关此问题的详细信息。

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

引用文档:

Named tuple instances do not have per-instance dictionaries, so they
are lightweight and require no more memory than regular tuples.


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

内存开销很小,但速度很快。


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> 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')

记住,元组是不可变的,字典是可变的。如果您想要不可变的类型,可以使用NamedDuple。