说我有:
t = (
('dog', 'Dog'),
('cat', 'Cat'),
('fish', 'Fish'),
)
我需要检查一个值是否在嵌套元组的第一位(即小写位)。我怎样才能做到这一点?大写值并不重要,我想只搜索小写值中的字符串。
if 'fish' in t:
print "Fish in t."
不起作用。
有没有一种很好的方法可以在不使用if语句进行for循环的情况下执行此操作?
答案 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."