如何对frozenset列表实现指定规则的字典序排序?
frozenset列表自定义字典序排序实现
可以实现,由于frozenset是无序集合类型,本身没有固定的元素顺序,所以需要先为每个frozenset生成有序的比较键,再基于键做字典序排序即可。
实现逻辑
你的示例中所有frozenset均为2个元素,要求优先比较第一个元素、再比较第二个元素的逻辑,对应操作是:
- 对每个frozenset内部的元素做升序排序,转成元组作为排序key
- 基于生成的key对所有frozenset做默认的字典序排序
代码实现
def sort_frozensets(*args): # 以每个frozenset升序排序后的元组为排序键,做字典序排序 return sorted(args, key=lambda fs: tuple(sorted(fs)))
效果测试
调用你给出的示例输入测试:
# 测试调用 res = sort_frozensets( frozenset(['d','b']), frozenset(['a','b']), frozenset(['z','a']), frozenset(['l','m']) ) print(res) # 输出结果: # [frozenset({'a', 'b'}), frozenset({'a', 'z'}), frozenset({'b', 'd'}), frozenset({'l', 'm'})]
输出顺序和你要求的结果完全一致。
扩展说明
如果你的frozenset元素数量不固定,上述逻辑依然通用,字典序会自动逐位比较元素;如果需要自定义元素的优先级(而非默认的字符编码顺序),只需要修改key生成逻辑,加入自定义的优先级映射即可。
内容的提问来源于stack exchange,提问作者CairoMisr
相关产品推荐
相关产品推荐

