2017-04-25 146 views
0

我想設置一個列表,但我想保留其餘列表的索引,如前所述。Python設置列表,但保留原始列表的索引

list_a = ['cat','dog','cat','mouse','dog'] 

list_b = [ 'c','c','c','d','d'] 

zipped = zip(list_a,list_b)

我想set上list_a但我也想要刪除從list_a設定後取出list_b的相應值。我想要什麼

例如:

new_zip 
>>> [('cat','c'),('dog','c'),('mouse','d')] 

我想荏苒2清單可以給我我想要什麼,但我可能無法設置,因爲元組的第二個參數的壓縮列表。

+0

什麼決定你是否爲「狗」保留「c」或「d」? – Prune

+0

'list_b'應該正好映射到'list_a' – jxn

+0

你有兩個「狗」的實例,映射到「c」和「d」。當你將list_a減少到一個集合時,你如何決定保留哪個索引? – Prune

回答

0

幾乎相當於配方根據您的Python版本,你可以做到以下幾點:

的Python 2:

dict(zip(list_a, list_b)).items() 

的Python 3:

list(dict(zip(list_a, list_b)).items()) 

都返回元組列表,相當於您正在查找的輸出。

-1

試試字典理解?

list_a = ['cat','dog','cat','mouse','dog'] 
list_b = [ 'c','c','c','d','d'] 
my_dict = {list_a[i] : list_b[i] for i in range(len(list_a))} 
print (my_dict) 

輸出:

{'cat': 'c', 'dog': 'd', 'mouse': 'd'} 

現在,當你願意,你可以提取鍵和值。這是否讓你足夠接近解決方案?

+3

mydict = dict(zip(list_a,list_b)),在相同的結果。 – plasmon360

0

當您不介意使用外部庫時,您可以使用iteration_utilities.unique_everseen。這就像一個set但允許使用key - 函數,並保持第一個遇到的值:

>>> from iteration_utilities import unique_everseen 
>>> from operator import itemgetter 
>>> list(unique_everseen(zip(list_a, list_b), key=itemgetter(0))) 
[('cat', 'c'), ('dog', 'c'), ('mouse', 'd')] 

免責聲明:iteration_utilities package是我寫的。但你可以找到在itertools Recipes documentation