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

时间:2017-06-17 19:54:53

标签: python django list dictionary tuples

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

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

我希望通过字符串名称来选择:

entity_type_index = ENTITY_TYPE_CHOICES['choice1']

我收到错误:

  

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

4 个答案:

答案 0 :(得分:2)

你可以建立一个字典:

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']

输出:

0

如果您不能使用字典:

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

print new_choice[0]

答案 1 :(得分:2)

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

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

choice = 0

for i in ENTITY_TYPE_CHOICES:
 if i[1] == "choice1":
  choice = i[0]

如果您现在打印它:

print(choice)  # Output: 0

现在,您可以将其与choice一起使用。

答案 2 :(得分:0)

您可以使用ENTITY_TYPE_CHOICES.index('choice1')

找到所选索引

然后,您可以使用以下代码来使用它提供的数字:

 ENTITY_TYPE_CHOICES[ENTITY_TYPE_CHOICES.index('choice1')]

答案 3 :(得分:0)

ENTITY_TYPE_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