如何使用匹配的第二个元素获取元组的第一个元素 预期的行为是
('John','P')
('Mary','P')
getAll('P')
返回['John','Mary']
答案 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']