繁体   English   中英

如何根据列表中的相同设置值对列表列表进行排序?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM