2017-04-25 149 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