Получение элемента из кортежей кортежей в python

Возможный дубликат:
Значение кортежа по ключу

Как найти название страны, имея свой код,

COUNTRIES = (
   ('AF', _(u'Afghanistan')),
   ('AX', _(u'\xc5land Islands')),
   ('AL', _(u'Albania')),
   ('DZ', _(u'Algeria')),
   ('AS', _(u'American Samoa')),
   ('AD', _(u'Andorra')),
   ('AO', _(u'Angola')),
   ('AI', _(u'Anguilla'))
)

У меня есть код AS, найдите его имя, не используя forloop на COUNTRIES tuple?

Ответ 1

Вы можете просто сделать:

countries_dict = dict(COUNTRIES)  # Conversion to a dictionary mapping
print countries_dict['AS']

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

Ответ 2

COUNTRIES = (
   ('AF', (u'Afghanistan')),
   ('AX', (u'\xc5land Islands')),
   ('AL', (u'Albania')),
   ('DZ', (u'Algeria')),
   ('AS', (u'American Samoa')),
   ('AD', (u'Andorra')),
   ('AO', (u'Angola')),
   ('AI', (u'Anguilla'))
)

print (country for code, country in COUNTRIES if code=='AD').next()
#>>> Andorra

print next((country for code, country in COUNTRIES if code=='AD'), None)
#Andorra
print next((country for code, country in COUNTRIES if code=='Blah'), None)
#None

# If you want to do multiple lookups, the best is to make a dict:
d=dict(COUNTRIES)
print d['AD']
#>>> Andorra

Ответ 3

Вы не можете.

Либо

[x[1] for x in COUNTRIES if x[0] == 'AS'][0]

или

filter(lambda x: x[0] == 'AS', COUNTRIES)[0][1]

но это все еще "петли".