我有一个奇怪的问题,我需要找到顺序无关紧要的项目的重复集合,但集合中重复值的存在确实很重要。例如,假设我有以下列表:
lol = [
['red'],
['blue', 'orange'],
['orange', 'red'],
['red', 'orange'],
['red', 'red'],
['blue', 'orange', 'red'],
['red', 'orange', 'blue']
]
就我而言,唯一的集合是:
unique_lol = [
['red'],
['blue', 'orange'],
['orange', 'red'],
['red', 'red'],
['blue', 'orange', 'red']
]
我希望获得的信息是重复的列表:
dup_lol = [
['orange', 'red'],
['blue', 'orange', 'red']
]
我不在乎哪个重复被报告为重复,即['orange', 'red']
vs ['red', 'orange']
,只是报告了重复组合。我首先尝试使用一组frozensets:
sofs = {frozenset(x) for x in lol}
但是,这种方法被列表绊倒了,['red', 'red']
列表被转换为['red']
:
set([frozenset(['red']),
frozenset(['orange', 'red']),
frozenset(['blue', 'orange', 'red']),
frozenset(['blue', 'orange'])])
另外,这并没有给我重复,只是给我唯一的,而且我无论如何也不能对列表列表进行差异。
我确信我可以迭代父列表蛮力样式,但我觉得我错过了一些简单的东西。我几乎需要一个字典,其中键是有序列表,值是组合出现的次数,但列表不能是字典键,而且这听起来很奇怪。