Gab*_*ira 8 python sorting list
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)
Jor*_*ril 16
您可以使用将每个第一个元素映射到其"权重"的字典,然后在排序函数中检查此字典.
就像是:
d = { "Report": 1,
"Article": 2,
"Book": 3 }
result = sorted(mylist, key=lambda x:d[x[0]])
Run Code Online (Sandbox Code Playgroud)
您可以使用字典,这样您就可以访问"Book","Article"等,而无需关心订单.我会把该列表中的数据放入一个如下所示的字典:
mydict = { u'Article': "somedata",
u'Report': "someotherdata", ...}
Run Code Online (Sandbox Code Playgroud)
如果您真的想按照描述的方式对列表进行排序,可以使用list.sort
带有表示特定排序顺序的键功能(文档).您需要键功能,因为您只需要访问第一个元素,排序顺序也不是按字母顺序排列的.