如何在Python中基于内容重新排序列表

2024-05-16 14:15:59 发布

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

我有这样一个python字典列表

l = [{'name': 'John', 'age': 23},
     {'name': 'Steve', 'age': 35},
     {'name': 'Helen'},
     {'name': 'George'},
     {'name': 'Jessica', 'age': 23}]

我在这里试图实现的是对l的元素进行重新排序,使每个包含键age的条目都移动到列表的末尾,如下所示

最终结果:

^{pr2}$

我该怎么做?在


Tags: name元素列表age字典排序条目john
1条回答
网友
1楼 · 发布于 2024-05-16 14:15:59

您可以对列表进行排序:

l.sort(key=lambda d: 'age' in d)

根据'age'键的存在,TrueFalseTrue排序在False之后。Python的sort是稳定的,其余的相对排序保持不变。在

演示:

^{pr2}$

如果也希望按年龄排序,则检索age值并为那些没有年龄但将首先排序的条目返回适当的稳定sentinel。float('-inf')将始终在任何其他数字之前排序,例如:

l.sort(key=lambda d: d.get('age', float('-inf')))

同样,没有年龄的条目将按其原始的相对顺序保留:

>>> l.sort(key=lambda d: d.get('age', float('-inf')))
>>> pprint(l)
[{'name': 'Helen'},
 {'name': 'George'},
 {'age': 23, 'name': 'John'},
 {'age': 23, 'name': 'Jessica'},
 {'age': 35, 'name': 'Steve'}]

相关问题 更多 >