我有一份清单
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中看到过其他类似的问题,但没有类似或容易适用于我.
Obs:我知道python中的列表不是按顺序修复的,但认为这个列表是.我正在使用Python 2.4
我有一个列表,比如(例如)这个:
mylist = [ ( u'Article', {"...some_data..."} ) ,
( u'Report' , {"...some_data..."} ) ,
( u'Book' , {"...another_data..."} ) ,
...#continue
]
Run Code Online (Sandbox Code Playgroud)
该变量mylist是从函数中获得的,返回列表的"顺序"会有所不同.所以,有时它就像在例子上.有时候,"报告"会出现在"文章"等之前.
我在此列表中有一个固定的订单(并不是按字母顺序排列).
让我们说我的固定顺序是:'报告','文章','书',......
所以,我想要的是:无论命令'mylist'被实例化,我都要重新排序,让'Report'保持在前面,'Article'在第二,等等......
使用我的"自定义"订单重新排序列表(使用列表中每个项目的元组的第一个元素)的最佳方法是什么?
答案:
我最终得到了这个:
mylist成了一个dicts列表,如下所示:
mylist = [{'id':'Article', "...some_data..."} ,
...etc
]
Run Code Online (Sandbox Code Playgroud)
每个dict都有一个必须排序的'id'.
在列表中保存正确的顺序在列表上分配correct_order:
correct_order = ['Report', 'Article', 'Book', ...]
Run Code Online (Sandbox Code Playgroud)
并做:
results = sorted([item for item in results], cmp=lambda x,y:cmp(correct_order.index(x['id']), correct_order.index(y['id'])))
Run Code Online (Sandbox Code Playgroud)