Tuple value by key
是否可以从元组中获取值:
1 2 3 4 5 | TUPLE = ( ('P', 'Shtg1'), ('R', u'Shtg2'), ('D', 'Shtg3'), ) |
通过调用像
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.
内存开销很小,但速度很快。
用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。