Поиск значений во вложенном кортеже - PullRequest
5 голосов
/ 17 июля 2009

Скажи, что у меня есть:

t = (
    ('dog', 'Dog'),
    ('cat', 'Cat'),
    ('fish', 'Fish'),
)

И мне нужно проверить, находится ли значение в первом бите вложенного кортежа (т. Е. Строчных битах) Как я могу это сделать? Значения, написанные заглавными буквами, значения не имеют, я хочу искать строку только в строчных значениях.

if 'fish' in t:
    print "Fish in t."

Не работает.

Есть ли хороший способ сделать это без выполнения цикла for с операторами if?

Ответы [ 4 ]

10 голосов
/ 17 июля 2009

Элементы кортежа можно извлечь, указав индекс: ('a', 'b')[0] == 'a'. Вы можете использовать список для перебора всех элементов некоторого повторяемого . Кортеж также итеративен. Наконец, any() сообщает, оценивает ли какой-либо элемент в данной итерации значение True. Собираем все это вместе:

>>> t = (
...     ('dog', 'Dog'),
...     ('cat', 'Cat'),
...     ('fish', 'Fish'),
... )
>>> def contains(w, t):
...     return any(w == e[0] for e in t)
... 
>>> contains('fish', t)
True
>>> contains('dish', t)
False
4 голосов
/ 17 июля 2009

Попробуйте:

any('fish' == tup[0] for tup in t)

РЕДАКТИРОВАТЬ: Стефан прав; исправлено 'fish' == tup [0]. Также см. Его более полный ответ.

3 голосов
/ 17 июля 2009

Если у вас есть итерация пар ключ-значение, таких как:

t = (
    ('dog', 'Dog'),
    ('cat', 'Cat'),
    ('fish', 'Fish'),
)

Вы можете "привести" его к словарю с помощью конструктора dict () , а затем использовать ключевое слово in.

if 'fish' in dict(t):
    print 'fish is in t'

Это очень похоже на ответ выше .

2 голосов
/ 17 июля 2009

Вы можете сделать что-то вроде этого:

if 'fish' in (item[0] for item in t):
    print "Fish in t."

или это:

if any(item[0] == 'fish' for item in t):
    print "Fish in t."

Если вы не заботитесь о порядке, но хотите сохранить связь между 'dog' и 'Dog', вы можете вместо этого использовать словарь:

t = {
    'dog': 'Dog',
    'cat': 'Cat',
    'fish': 'Fish',
}

if 'fish' in t:
    print "Fish in t."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...