使用Python在自定义顺序中对列表进行排序

elw*_*lwc 20 python sorting list python-2.7

我有一份清单

mylist = [['123', 'BOOL', '234'], ['345', 'INT', '456'], ['567', 'DINT', '678']]

我想按顺序排序1. DINT2. INT3.BOOL

结果:

[['567', 'DINT', '678'], ['345', 'INT', '456'], ['123', 'BOOL', '234']]

我在stackoverflow中看到过其他类似的问题,但没有类似或容易适用于我.

Sea*_*ira 44

SORT_ORDER = {"DINT": 0, "INT": 1, "BOOL": 2}

mylist.sort(key=lambda val: SORT_ORDER[val[1]])
Run Code Online (Sandbox Code Playgroud)

我们在这里所做的就是提供一个新的元素来排序,为列表中的每个元素而不是整个列表返回一个整数.我们可以使用内联三元表达式,但这会有点笨拙.

  • Python 有一个可以使用的字典的 `.get` 方法,所以你可以做 `lambda val: SORT_ORDER.get(val[1], "MY DEFAULT SORT ORDER VALUE")` @joddm (3认同)
  • 很好,但以此为灵感,我更喜欢 `SORT_ORDER = ["DINT", "INT", "BOOL"]` `mylist.sort(key=lambda val: SORT_ORDER.index(val))`。我想也许这不如使用索引那么快?但似乎更容易解释。 (3认同)