2013-11-27 225 views

回答

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'] 
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) 
1

下面的函數可以過濾所期望:

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

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

這使用一個列表解析包括該元組的第一個元素,但只有當所述元組的第二個元素相匹配key(在你的例子'P')。

0
[t[0] for t in list_of_tuples if t[1] == 'P'] 
相關問題