Python设置列表但保留原始列表的索引

时间:2017-04-25 23:30:38

标签: python list indexing set

我正在尝试设置一个列表,但我想保留其余列表的索引,如前所述。

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

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

zipped = zip(list_a,list_b)

我想在list_a上set但我还想删除在set_a之后从list_a中删除的list_b的相应值。

我想要的例子:

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

我认为压缩2列表可以给我我想要的但我可能无法设置压缩列表,因为元组的第二个参数。

3 个答案:

答案 0 :(得分: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

中找到几乎相同的食谱

答案 1 :(得分:0)

根据您的Python版本,您可以执行以下操作:

Python 2:

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

Python 3:

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

两者都返回一个元组列表,相当于您正在寻找的输出。

答案 2 :(得分:-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'}

现在您可以根据需要提取键和值。这会让你足够接近解决方案吗?