What is the most Pythonic way to test for match with first item of tuple in sequence of 2-tuples?
python
Solution
>>> tups = (('a', 1), ('b', 2), ('c', 3))
>>> 'a' in (x[0] for x in tups)
True
>>> 'd' in (x[0] for x in tups)
False
the above solution will exit as soon as `a` is found, proof:
>>> tups = (('a', 1),('a',5), ('b', 2), ('c', 3))
>>> gen=(x[0] for x in tups)
>>> 'a' in gen
True
>>> list(gen)
['a', 'b', 'c'] #this result means generator stopped at first 'a'
Problem
Suppose you have a sequence of 2-tuples: ``` seq_of_tups = (('a', 1), ('b', 2), ('c', 3)) ``` and you want to test if `'a'` is the first item of any tuple in the sequence. What is the most Pythonic way? Convert to a dictionary and test for keys, which seems easy enough to understand? i.e. ``` 'a' in dict(seq_of_tups) ``` Use a cute zip trick which is is not particularly clear unless you know the trick? i.e. ``` 'a' in zip(*seq_of_tups)[0] ``` Or be really explicit with map? i.e. ``` 'a' in map(lambda tup: tup[0], seq_of_tups) ``` Or is there a better way than any of these choices?