首页 > 解决方案 > 在 Python 中的对象列表中查找唯一元素

问题描述

我有 Python 中的对象列表。每个对象都包含自己的列表。该列表包含该对象的一些类别。每个列表恰好包含 15 个元素(可以是字母、数字或符号 -),例如。

['A', 'A', '1', '-', ... , 'B'] or ['-', 'C', 'X', '-', ... , 'D']

我的目标是为列表中的每个类别或更精确地找到每个位置的唯一值,最好以字典的形式存储,例如:

{0: {'A', '-'} 1: {'A', 'C'} ... }

所以我需要遍历列表中的所有对象并保存这些唯一值。有没有办法以优雅的pythonic方式做到这一点?

感谢所有的答案。

标签: pythonlistdictionaryunique

解决方案


您可以将对象位置明智地配对zip

>>> a=['A', 'A', '1', '-', 'B']
>>> b=['-', 'C', 'X', '-', 'D']
>>> list(zip(a,b))
[('A', '-'), ('A', 'C'), ('1', 'X'), ('-', '-'), ('B', 'D')]
>>> 

并从您的样本中获取该字典,您可以添加enumerate到组合中

>>> dict(enumerate(zip(a,b)))
{0: ('A', '-'), 1: ('A', 'C'), 2: ('1', 'X'), 3: ('-', '-'), 4: ('B', 'D')}
>>> 

并获得唯一的此类配对,您可以使用它set来删除重复项

>>> c=['A', 'A', '1', '-', 'B', 'A', 'A', '1', '-', 'B']
>>> d=['-', 'C', 'X', '-', 'D', '-', 'C', 'X', '-', 'D']
>>> list(zip(c,d))
[('A', '-'), ('A', 'C'), ('1', 'X'), ('-', '-'), ('B', 'D'), ('A', '-'), ('A', 'C'), ('1', 'X'), ('-', '-'), ('B', 'D')]
>>> set(zip(c,d))
{('A', '-'), ('1', 'X'), ('A', 'C'), ('-', '-'), ('B', 'D')}
>>> 

推荐阅读