我有以下元组列表:它适用于django模型中的选择字段。
ENTITY_TYPE_CHOICES = (
(0,'choice1'),
(1,'choice2'),
)
我希望通过字符串名称来选择:
entity_type_index = ENTITY_TYPE_CHOICES['choice1']
我收到错误:
元组索引必须是整数,而不是str
答案 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