列表字典的自定义排序方法Python

2024-06-16 11:10:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张单子:

ldicts = [{'name': '120-150'}, {'name': '90-120'}, {'name': '150-180'}, {'name': '>= 180'}, {'name': '<90'}, {'name': 'total'}]

我想按值升序对其进行排序,以便输出如下:

 sortedldicts = [{'name': 'total'}, {'name': '<90'}, {'name': '90-120'},{'name': '120-150'}, {'name': '150-180'}, {'name': '>= 180'}]

正常的排序不起作用:

from operator import itemgetter
sortedldicts = sorted(ldicts , key=itemgetter('name'), reverse=True)

所以我想我应该做一个自定义排序也许?任何提示或帮助都将不胜感激。你知道吗


Tags: keynamefromimporttrue排序operator单子
1条回答
网友
1楼 · 发布于 2024-06-16 11:10:37

使用re.findall提取数字:

>>> ldicts = [{'name': '120-150'}, {'name': '90-120'}, {'name': '150-180'}, {'name': '>= 180'}, {'name': '<90'}, {'name': 'total'}]
>>>
>>> import re
>>> sorted(ldicts, key=lambda d: map(int, re.findall(r'\d+', d['name'])))
[{'name': 'total'}, {'name': '<90'}, {'name': '90-120'}, {'name': '120-150'}, {'name': '150-180'}, {'name': '>= 180'}]
  • 如果使用python3.x,则将map(int, ...)替换为list(map(int, ...))

相关问题 更多 >