Python:如何自定义排序列表?

标签 python list sorting

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/

相关文章:

python - cv2.imshow() 循环打开多个窗口

python - 如何绕过 nsswitch.conf 在 Linux 上(使用 python)进行 DNS 查询并且没有额外的包

python - 如何拆分列表的元素?

c# - 如何有效地交叉引用 2 个文本文件? |改进我的代码

python - 如何在Python中管理列表

java - 如何按频率而不是按字母顺序对字符串数组进行排序

performance - 交换和转移有什么区别?

python - 如何在类启动中删除不需要的参数?

Python 将列表中的数据保存到 CSV 的列中

java - 按字母顺序对列表进行排序,头部有特定值(如果存在)