Один элемент соответствия ключевого слова кортежа в Python - PullRequest
4 голосов
/ 06 марта 2011

Если у меня есть такие слова, как:

foo = {('foo', 45):5, ('bar', 34):3}

Как я могу проверить часть этого кортежа?

if 'foo' in foo: #should be true
    pass
if 45 in foo: #also should be true

Или другой синтаксис.

Ответы [ 3 ]

7 голосов
/ 06 марта 2011
>>> foo = {('foo', 45): 5, ('bar', 34): 3}    
>>> any(t1 == "foo" for (t1, t2) in foo)
True    
>>> any(t2 == 45 for (t1, t2) in foo)
True

Если вы не знаете, где найти значение, вы можете просто проверить всю пару:

>>> any(45 in pair for pair in foo)
True

Вы также можете использовать подход генераторов ( flatten ):

>>> 45 in flatten(foo)
True

Тем не менее, вероятно, лучшая идея - построить ваши данные, чтобы вы могли проверить этот тип включения за O (1) время (набор? Словарь с рефакторингом?)

1 голос
/ 06 марта 2011

Вы можете использовать operator.concat для выравнивания всех клавиш:

>>> import operator
>>> 'foo' in reduce(operator.concat, foo.keys())
True

... или любой:

any('foo' in t for t in foo.keys())
0 голосов
/ 06 марта 2011

Другая возможность с использованием понимания списка:

if 'foo' in [key[0] for key in foo]:
  pass
if 45 in [key[1] for key in foo]:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...