我有一个包含 2 或 3 个字符串的列表,最后一个字符相同。
example_list = ['h1','ee1','hi1','ol1','b1','ol1','b1']
有没有办法使用另一个列表的顺序对这个列表进行排序。
order_list = ['ee','hi','h','b','ol']
所以答案应该是这样的 example_list.sort(use_order_of=order_list)
哪个应该产生像这样的输出 ['ee1','hi1','h1','b1','b1','ol1','ol1']
我在 StackOverflow 上发现了其他问题,但我仍然无法找到一个很好解释的答案。
您可以构建一个order_map
将前缀映射到其排序键的映射,然后在调用时使用该映射作为键sorted
:
example_list = ['h1','ee1','hi1','ol1','b1','ol1','b1']
order_list = ['ee','hi','h','b','ol']
order_map = {x: i for i, x in enumerate(order_list)}
sorted(example_list, key=lambda x: order_map[x[:-1]])
这比调用order_list.index
每个元素有优势,因为从字典中获取元素很快。
您还可以order_list
通过使用dict.get
默认值来使其与缺少的元素一起使用。如果默认值很小(例如-1
),则未出现在其中的值order_list
将放在排序列表的前面。如果默认值很大(例如float('inf')
),则未出现的值order_list
将放在排序列表的后面。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句