我正在尝试设置一个列表,但我想保留其余列表的索引,如前所述。
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列表可以给我我想要的但我可能无法设置压缩列表,因为元组的第二个参数。
答案 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'}
现在您可以根据需要提取键和值。这会让你足够接近解决方案吗?