[英]How to sort a list of list based on the same set value in the list?
a = [['a', 'b'], ['b'], ['b', 'a']]
因为第一个和第三个元素是相同的,如果将它们转换为集合,我想对列表 'a' 进行排序,以便具有相同集合值的任何两个元素彼此相邻。 对于上面的示例,排序结果将是:
a = [['a', 'b'], ['b', 'a'], ['b']]
要么
a = [['b'], ['a', 'b'], ['b', 'a']]
您可以使用list(set(x))
作为您的密钥。 由于这强加的排序有点随意,您可以将sorted
添加到组合中:
a = [['a', 'b'], ['b'], ['b', 'a']]
a.sort(key=lambda x: sorted(set(x)))
请注意,这与使用key=sorted
因为重复元素的处理方式不同。
使用带有frozenset
hash
一种方法:
sorted(a, key=lambda x: hash(frozenset(x)))
输出:
[['b'], ['a', 'b'], ['b', 'a']]
使用更多元素进行测试:
a = [['a', 'b', 'c'], ['a', 'b'],
['b'], ['b', 'd'], ['b', 'a'],
['a', 'c'], ['b', 'c', 'a']]
sorted(a, key=lambda x: hash(frozenset(x)))
输出:
[['a', 'c'],
['a', 'b', 'c'],
['b', 'c', 'a'],
['b'],
['b', 'd'],
['a', 'b'],
['b', 'a']]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.