Obs:我知道 python 中的列表不是固定顺序的,但我认为这个会是。 我正在使用 Python 2.4
我有一个列表,比如(例如)这个:
mylist = [ ( u'Article', {"...some_data..."} ) ,
( u'Report' , {"...some_data..."} ) ,
( u'Book' , {"...another_data..."} ) ,
...#continue
]
这个变量 mylist 是从一个函数中得到的,返回的列表的‘顺序’会有所不同。所以,有时它会像例子一样。有时,“报告”会出现在“文章”之前,等等。
我在这个列表中有一个固定的顺序(不是字母顺序)。
假设我的固定顺序是:“报告”、“文章”、“书籍”……
所以,我想要的是:无论实例化“mylist”的顺序是什么,我都想对其重新排序,使“报告”位于最前面,“文章”位于第二位,等等...
使用我的“自定义”顺序重新排序我的列表(获取列表中每个项目的元组的第一个元素)的最佳方法是什么?
回答:
我最终得到了这个:
mylist 变成了一个字典列表,像这样:
mylist = [{'id':'Article', "...some_data..."} ,
...etc
]
每个字典都有一个必须排序的“id”。
在列表中保存正确的顺序在列表中分配正确的顺序:
correct_order = ['Report', 'Article', 'Book', ...]
和做:
results = sorted([item for item in results], cmp=lambda x,y:cmp(correct_order.index(x['id']), correct_order.index(y['id'])))
最佳答案
您可以使用一个字典将每个第一个元素映射到它的“权重”,然后在排序函数中检查这个字典。
类似于:
d = { "Report": 1,
"Article": 2,
"Book": 3 }
result = sorted(mylist, key=lambda x:d[x[0]])
关于Python:如何自定义排序列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3624323/