我有一个列表
mylist = [['123', 'BOOL', '234'], ['345', 'INT', '456'], ['567', 'DINT', '678']]
我想按照以下顺序排序:1. DINT
2. INT
3. BOOL
结果:
[['567', 'DINT', '678'], ['345', 'INT', '456'], ['123', 'BOOL', '234']]
我在stackoverflow上看到了其他类似的问题,但没有类似或易于应用于我。
我有一个列表
mylist = [['123', 'BOOL', '234'], ['345', 'INT', '456'], ['567', 'DINT', '678']]
我想按照以下顺序排序:1. DINT
2. INT
3. BOOL
结果:
[['567', 'DINT', '678'], ['345', 'INT', '456'], ['123', 'BOOL', '234']]
我在stackoverflow上看到了其他类似的问题,但没有类似或易于应用于我。
SORT_ORDER = {"DINT": 0, "INT": 1, "BOOL": 2}
mylist.sort(key=lambda val: SORT_ORDER[val[1]])
我们在这里所做的一切就是提供一个新元素,通过为列表中的每个元素返回一个整数而不是整个列表进行排序。 我们可以使用内联三元表达式,但这会变得有些笨重。
.get
方法,可以用来获取键对应的值,因此你可以使用如下代码:lambda val: SORT_ORDER.get(val[1], "我的默认排序方式")
。@joddm - Sean VieiraSORT_ORDER = ["DINT", "INT", "BOOL"]
mylist.sort(key=lambda val: SORT_ORDER.index(val))
。我想也许这样做的速度没有使用索引快?但它似乎更容易解释。 - Jamesindx = [2,1,0]
并创建一个包含您所需订单的新列表:
mylist = [mylist[_ind] for _ind in indx]
Out[2]: [['567', 'DINT', '678'], ['345', 'INT', '456'], ['123', 'BOOL', '234']]
由于它不是按字母顺序排列的,我认为没有一个单一的函数可以对其进行排序,但您可以创建一个新列表,然后进行附加。这是一种比较简单的方法,但它能够完成工作。
newlist=[];
for sub_list in mylist:
if(sub_list[1] == 'DINT']):
newlist.append(sub_list);
for sub_list in mylist:
if(sub_list[1] == 'INT']):
newlist.append(sub_list);
for sub_list in mylist:
if(sub_list[1] == 'BOOL']):
newlist.append(sub_list);
filter
或其他方法。 - Karl Knechteldef explicit_order(xs):
"""Return a key function that, when passed to sort or sorted, will sort
the elements in the order they appear in this list.
"""
keys = {x: i for i, x in enumerate(xs)}
def key_function(x):
return keys[x]
return key_function
order = explicit_order(['DINT', 'INT', 'BOOL'])
sorted(['BOOL', 'INT'], key=order) # = ['INT', 'BOOL']
sorted(mylist, key=lambda x: order(x[1]))
python 3.2
1. sorted(mylist,key=lambda x:x[1][1])
2. sorted(mylist,reverse=True)