在python中按字符串名称获取元组列表元素

在python中按字符串名称获取元组列表元素,python,django,list,dictionary,tuples,Python,Django,List,Dictionary,Tuples,我有以下元组列表:它用于django模型中的选择字段 ENTITY_TYPE_CHOICES = ( (0,'choice1'), (1,'choice2'), ) 我希望通过字符串名称获得选项,如: entity_type_index = ENTITY_TYPE_CHOICES['choice1'] 我得到一个错误: 元组索引必须是整数,而不是str 您可以构建字典: ENTITY_TYPE_CHOICES = ( (0,'choice1'), (1,'choice2'),

我有以下元组列表:它用于django模型中的选择字段

ENTITY_TYPE_CHOICES = (
    (0,'choice1'),
    (1,'choice2'),
)
我希望通过字符串名称获得选项,如:

entity_type_index = ENTITY_TYPE_CHOICES['choice1']
我得到一个错误:

元组索引必须是整数,而不是str


您可以构建字典:

ENTITY_TYPE_CHOICES = (
(0,'choice1'),
(1,'choice2'),
)

ENTITY_TYPE_CHOICES = dict([i[::-1] for i in ENTITY_TYPE_CHOICES])

entity_type_index = ENTITY_TYPE_CHOICES['choice1']
new_choice = [i[0] for i in ENTITY_TYPE_CHOICES if i[1] == 'choice1']

print new_choice[0]
输出:

0
如果您不能使用字典:

ENTITY_TYPE_CHOICES = (
(0,'choice1'),
(1,'choice2'),
)

ENTITY_TYPE_CHOICES = dict([i[::-1] for i in ENTITY_TYPE_CHOICES])

entity_type_index = ENTITY_TYPE_CHOICES['choice1']
new_choice = [i[0] for i in ENTITY_TYPE_CHOICES if i[1] == 'choice1']

print new_choice[0]

您可以使用
ENTITY\u TYPE\u CHOICES.index('choice1')

然后,您可以使用它提供的号码访问它,方法是:

 ENTITY_TYPE_CHOICES[ENTITY_TYPE_CHOICES.index('choice1')]

ENTITY\u Type\u CHOICES
的类型是
tuple
,但您可以将其用作
dict

您可以编写迭代元组并查找键的方法:

get_entity_type_index(k):
    for index, key in ENTITY_TYPE_CHOICES:
         if key == k: return index
但这种方式不是最佳实践


基于@Ajax1234答案:

ENTITY_TYPE_CHOICES = (
   (0,'choice1'),
   (1,'choice2'),
)

ENTITY_TYPE_CHOICES_INDEX = {value: key for key, value in ENTITY_TYPE_CHOICES} 

print(ENTITY_TYPE_CHOICES_INDEX['choice2']) # output: 1

您可以遍历该元组。元组对象只能通过索引访问,不能通过元素(作为字典)访问

如果您现在打印它:

print(choice)  # Output: 0

现在,您可以将它与
选项一起使用

您希望通过其其他值访问该值的可能重复项…如上所述,元组元素必须通过其位置访问,因此是一个数字。你可能想试试字典?这个答案怎么了?我觉得这很好。@Mr.Xcoder:我只是猜测:django模型中的选择字段必须是元组,而不是dict。