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

Python:如何使用元组作为查找

  •  -1
  • NewToJS  · 技术社区  · 7 年前

    假设我有一个元组,比如:

    MY_CHOICES = (
        ('AB', 'APPLE BANANNA'),   
        ('O', 'ORANGE'),    
        ('W', 'WATERMELLON'),    
        ('SB', 'STRAWBERRY BANANNA'),  
        ('CM', 'CHERRY MELLON'),    
    )
    

    我如何使用它作为查找和循环列表,如:

    fruit_list = ['AB','SB','CM']
    

    要做到这一点:

    ['APPLE BANANNA','STRAWBERRY BANANNA','CHERRY MELLON']
    

    这就是我要做的:

        fruit_list_final = []
    
        for fruit in fruit_list:
            fruit_list_final.append( MY_CHOICES[fruit] )
    
        print fruit_list_final
    

    但我得到一个错误: 类型错误:元组索引必须是整数,而不是unicode

    3 回复  |  直到 7 年前
        1
  •  2
  •   nosklo    7 年前

    MY_CHOICES_DICT = dict(MY_CHOICES)
    result = [MY_CHOICES_DICT[fruit] for fruit in fruit_list]
    print(result)
    

    结果是:

    ['APPLE BANANNA', 'STRAWBERRY BANANNA', 'CHERRY MELLON']
    
        2
  •  1
  •   spectras    7 年前

    还有另一种方式:

    result = [
        next(name for code, name in MY_CHOICES if code == item)
        for item in fruit_list
    ]
    

    这并不构建中间字典,而是迭代每个水果的数组。如果列表较小,则可能会产生更好的性能。如果名单很长,肯定会更糟。

    StopIteration 将引发异常。

        3
  •  0
  •   Open AI - Opting Out    7 年前

    你可以利用 next :

    MY_CHOICES = (
        ('AB', 'APPLE BANANA'),   
        ('O', 'ORANGE'),    
        ('W', 'WATERMELON'),    
        ('SB', 'STRAWBERRY BANANA'),  
        ('CM', 'CHERRY MELON'),    
    )
    
    print(next(value for key, value in MY_CHOICES
               if key == 'W'))
    

    WATERMELON
    
    推荐文章