Python: Как использовать кортеж кортежей в качестве поиска - PullRequest
0 голосов
/ 03 июля 2018

Скажем, у меня есть кортеж вроде:

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

Но я получаю сообщение об ошибке: Ошибка типа: индексы кортежа должны быть целыми числами, а не юникодом

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

Вы можете использовать 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
0 голосов
/ 03 июля 2018

Еще один способ:

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

Это не создает промежуточный словарь, но итерирует массив для каждого фрукта. Если список небольшой, это может привести к повышению производительности. Если список длинный, то наверняка будет намного хуже.

Обратите внимание, что отсутствующий фрукт вызовет исключение StopIteration.

0 голосов
/ 03 июля 2018

Преобразуйте его в диктовку.

Пример:

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

Результат:

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