如何根据Python的内容重新排序Python中的列表

时间:2014-10-28 12:45:27

标签: python python-2.7 list

我在这个python中有一个字典列表;

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

我在这里尝试实现的是重新排序l的元素,使得包含键age的每个条目都移动到列表的末尾,如此;

最终结果:

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

我该怎么做?

1 个答案:

答案 0 :(得分:3)

您可以对列表进行排序:

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

根据True密钥的存在,密钥返回False'age'; TrueFalse之后排序。 Python的排序是稳定的,其余的相对排序保持不变。

演示:

>>> from pprint import pprint
>>> l = [{'name': 'John', 'age': 23},
...      {'name': 'Steve', 'age': 35},
...      {'name': 'Helen'},
...      {'name': 'George'},
...      {'name': 'Jessica', 'age': 23}]
>>> l.sort(key=lambda d: 'age' in d)
>>> pprint(l)
[{'name': 'Helen'},
 {'name': 'George'},
 {'age': 23, 'name': 'John'},
 {'age': 35, 'name': 'Steve'},
 {'age': 23, 'name': 'Jessica'}]

如果想要按年龄排序,则检索年龄值并为那些没有年龄但将首先排序的条目返回合适的稳定标记。 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'}]