我有一个这样的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}]
我怎样才能做到这一点?
您可以对列表进行排序:
l.sort(key=lambda d: 'age' in d)
密钥根据密钥的存在返回True
或;排序后。Python的排序是稳定的,其余的相对顺序保持不变。False
'age'
True
False
演示:
>>> 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'}]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句