在嵌套元组中查找值

时间:2009-07-17 15:57:17

标签: python

说我有:

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

我需要检查一个值是否在嵌套元组的第一位(即小写位)。我怎样才能做到这一点?大写值并不重要,我想只搜索小写值中的字符串。

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

不起作用。

有没有一种很好的方法可以在不使用if语句进行for循环的情况下执行此操作?

4 个答案:

答案 0 :(得分:10)

可以通过指定索引来提取元组的元素:('a', 'b')[0] == 'a'。您可以使用list comprehension迭代某些 iterable 的所有元素。元组也是可迭代的。最后,any()告诉给定iterable中的任何元素是否计算为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

答案 1 :(得分:4)

尝试:

any('fish' == tup[0] for tup in t)
编辑:斯蒂芬是对的;固定'鱼'== tup [0]。另见他更完整的答案。

答案 2 :(得分:3)

当您拥有可迭代的键值对时,例如:

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

您可以使用dict()构造函数将其“转换”为字典,然后使用in关键字。

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

这与above answer非常相似。

答案 3 :(得分:2)

你可以这样做:

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."