在python中 - 我有一个集合列表
members = [set(1,2,3), set(2,4,1), set(1,3,2), set(2,1,3)]
我想按字典顺序对这些进行排序,而不是(如果可能的话)转换为元组。
如果他们是元组,我可以简单地使用:
members.sort()
由于在不使用iter(members[0]).next()
之类的内容的情况下无法通过索引访问集合,因此我无法使用sort(key=)
语法。也许我错过了一些简单的东西,可以使这种语法适用?
我的目标是尽可能避免set
到tuple
到set
的转化。
编辑:鉴于集合的顺序不固定,我发现这是一个有争议的问题。下面的大部分答案都涉及到集合中的一些项目。列表中的某些集合怎么样?我要求知道这种排序只是一种潜在的实现,因为不能保证内部订单。
答案 0 :(得分:3)
您的请求实际上没有意义,词典排序需要定义订单(对第一个元素进行排序,如果第一个元素等同于比较第二个元素,依此类推),但set
元素不是排序。
但是你可以定义你的自定义比较函数,但是你真的不清楚你要做什么(一组中没有“第一”元素)。
答案 1 :(得分:2)
>>> members = [set([1,2,3]), set([2,4,1]), set([1,3,2]), set([2,1,3])]
>>> members.sort(key=sorted)
>>> members
0: [set([1, 2, 3]), set([1, 2, 3]), set([1, 2, 3]), set([1, 2, 4])]
答案 2 :(得分:0)
members = [{1,2,4},{1,2,3},{1,2,3},{1,2,3},{1,2}]
members.sort(key = lambda a:“,”。join(map(str,sorted(a))))
会员
[{1,2},{1,2,3},{1,2,3},{1,2,3},{1,2,4}]