python - 根据另一个排序列表对python中的列表进行排序

标签 python list sorting

我想根据预先排序的列表对 Python 中的列表进行排序。

presorted_list = ['2C','3C','4C','2D','3D','4D']
unsorted_list = ['3D','2C','4D','2D']

如何对 unsorted_list 进行排序,使值的显示顺序与 presorted_list 的顺序相同?也就是说,在这种情况下,排序后的结果应该是 ['2C','2D','3D','4D']

最佳答案

In [5]: sorted(unsorted_list, key=presorted_list.index)
Out[5]: ['2C', '2D', '3D', '4D']

或者,为了更好的性能(特别是当 len(presorted_list) 很大时),

In [6]: order = {item:i for i, item in enumerate(presorted_list)}    
In [7]: sorted(unsorted_list, key=order.__getitem__)
Out[7]: ['2C', '2D', '3D', '4D']

有关如何使用 key 进行排序的更多信息,请参阅出色的 Howto Sort wiki .


如果 unsorted_list 包含不在 presorted_list 中的项(例如 '6D'),则上述方法将引发错误。您首先必须决定如何对这些项目进行排序。如果你想让它们放在列表的末尾,你可以使用

In [10]: unsorted_list = ['3D','2C','6D','4D','2D']

In [11]: sorted(unsorted_list, key=lambda x: order.get(x, float('inf')))
Out[11]: ['2C', '2D', '3D', '4D', '6D']

或者如果您希望将此类项目放在列表的前面,请使用

In [12]: sorted(unsorted_list, key=lambda x: order.get(x, -1))
Out[12]: ['6D', '2C', '2D', '3D', '4D']

关于python - 根据另一个排序列表对python中的列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36518800/

相关文章:

c# - list.AddRange 无法隐式转换类型 'void'

python - 列表更改意外地反射(reflect)在子列表中

python - 按另外两个列表对 Python 中的列表进行排序

python - 嵌套循环 Python

python - Django allauth social login(google OAuth 2) - 域限制列表

python - 有没有办法在 Python 2.7 或 numpy 中将图像数据保存为列表/数组?

javascript - 按 "Levenshtein Distance"对数组进行排序,在 Javascript 中性能最佳

python - Pandas 日期时间格式

python - GAE支持为Python编写多线程代码吗?

javascript - 最好使用 Lodash 按查找表对值进行排序