我在这个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}]
我该怎么做?
答案 0 :(得分:3)
您可以对列表进行排序:
l.sort(key=lambda d: 'age' in d)
根据True
密钥的存在,密钥返回False
或'age'
; True
在False
之后排序。 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'}]