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

时间:2018-07-03 19:55:47

标签: python list tuples

说我有一个元组,例如:

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

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

3 个答案:

答案 0 :(得分:2)

将其转换为字典。

示例:

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

结果是:

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

答案 1 :(得分:1)

另一种方式:

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

这不会建立中间词典,但是会为每个水果迭代数组。如果列表较小,则可能会产生更好的性能。如果清单很长,那肯定会更糟。

请注意,缺少水果会引发StopIteration异常。

答案 2 :(得分:0)

您可以使用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