代码之家  ›  专栏  ›  技术社区  ›  alias51

什么是最有效的反向查找元组的方法?

  •  0
  • alias51  · 技术社区  · 5 年前

    我有一个选项字段,有一个元组列表:

    EVENT_CHOICES = [(1, "queued"), (2, "sent"), (3, "failed")]
    

    它存储为 PositiveSmallIntegerField 而不是 CharField 出于执行原因:

    event_type = models.PositiveSmallIntegerField(choices=EVENT_TYPE_CHOICES)
    

    POSTS 这个 str 元组的组件。E、 g.我收到 queued , sent failed 作为一个 POST 变量。

    反向查找的最简单/最有效的方法是什么 EVENT_CHOICES int ?

    E、 g,一个笨拙的长形方法是:

    if event == "queued":
       event_type = 1
    if event == "sent":
       event_type = 2
    if event == "failed":
       event_type = 3
    

    考虑到我实际上有很多选择,我想必须有一个更整洁的方法来做这个?

    1 回复  |  直到 5 年前
        1
  •  4
  •   Joran Beasley    5 年前

    如果你只需要做一个查找,你可以迭代它

    def get_idx(choice):
        for idx,evt in EVENT_CHOICES:
            if evt == choice:
               return idx
    

    或者如果你要做不止一次,你应该创建一个反向指令

    dataReversed = {choice:idx for idx,choice in EVENT_CHOICES}
    dataReversed.get('queued')
    
    推荐文章