如何使用匹配的第二个元素(python)获取元组的第一个元素

时间:2013-11-27 22:36:58

标签: python

如何使用匹配的第二个元素获取元组的第一个元素 预期的行为是

('John','P')
('Mary','P') 
getAll('P') 

返回['John','Mary']

4 个答案:

答案 0 :(得分:2)

使用列表理解:

>>> lis = [ ('John','P'), ('Mary','P') ]
def getall(my_list, s):
    return [x for x, y in my_list if y==s]
... 
>>> getall(lis, 'P')
['John', 'Mary']

如果您多次这样做,那么最好在这里使用字典:

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for v, k in lis:
...     d[k].append(v)
...     
>>> d['P']
['John', 'Mary']

答案 1 :(得分:2)

以下功能可让您根据需要进行过滤:

data = [('John','P'), ('Mary','P')]

def getAll(mydata, key):
    return [item[0] for item in mydata if item[1] == key]

这使用包含元组的第一个元素的列表推导,但仅当元组的第二个元素与key匹配时(在您的示例中为'P')。

答案 2 :(得分:0)

假设您有这些元组的列表?为简单起见,这个答案不使用列表理解。如果你问这个问题,你可能不知道列表理解是什么。

def get_all(foo, that_list):
    new_list = []
    for item in that_list:
        if item[1] == foo:
            new_list.append(item[0])
    return new_list

some_list = [('John', 'P'), ('Mary', 'P')]
get_all('P', some_list)

答案 3 :(得分:0)

[t[0] for t in list_of_tuples if t[1] == 'P']