【问题标题】:get tuple list element by string name in python在python中通过字符串名称获取元组列表元素
【发布时间】:2017-11-20 09:18:22
【问题描述】:

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

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

我想通过它们的字符串名称来获得选择,例如:

entity_type_index = ENTITY_TYPE_CHOICES['choice1']

我得到错误:

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

【问题讨论】:

  • Tuple value by key的可能重复
  • 您想通过其他值访问该值...
  • 如前所述,元组元素必须通过它们的位置来访问,所以是一个数字。你可能想试试字典?

标签: python django list dictionary tuples


【解决方案1】:

你可以建立一个字典:

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]

【讨论】:

  • 这个答案有什么问题?我认为这完全没问题。
  • @Mr.Xcoder:我只是在猜测:django 模型中的选择字段必须是元组,而不是字典。
【解决方案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 一起使用。

【讨论】:

    【解决方案3】:

    您可以使用ENTITY_TYPE_CHOICES.index('choice1')找到选择的索引

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

     ENTITY_TYPE_CHOICES[ENTITY_TYPE_CHOICES.index('choice1')]
    

    【讨论】:

      【解决方案4】:

      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
      

      【讨论】:

        猜你喜欢
        • 2016-03-05
        • 1970-01-01
        • 2018-12-31
        • 1970-01-01
        • 2019-01-06
        • 1970-01-01
        • 2018-12-31
        • 1970-01-01
        • 2016-04-12
        相关资源
        最近更新 更多