Ser*_*gey 5 python sorting list
我正在按键排序一个dicts列表:
groups = sorted(groups, key=lambda a: a['name'])
Run Code Online (Sandbox Code Playgroud)
一些dicts的名称设置为None,而Python 2将None值放在任何其他值之前,因此它们位于排序列表的前面.一个天真的解决方案
groups = sorted(groups, key=lambda a: a['name'] or 'zzzz')
Run Code Online (Sandbox Code Playgroud)
但是,显然,这对任何非拉丁名字都不起作用.
什么是一种很好的Pythonic方法来排序包含None值的列表,以便将这些值放在列表的末尾?
Dav*_*son 14
你可以通过在元组上键入它来做到这一点:
groups = sorted(groups, key=lambda a: (a['name'] is None, a['name']))
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为Python按字典顺序比较元组(在第一个元素上,然后在第二个元素上断开关系),并且因为False早于True排序.一组像这样的组
[{'name': 0}, {'name': 1}, {'name': 2}, {'name': 3}, {'name': 4}, {'name': None}]
Run Code Online (Sandbox Code Playgroud)
会变成
[(False, 0), (False, 1), (False, 2), (False, 3), (False, 4), (True, None)]
Run Code Online (Sandbox Code Playgroud)
开头的元组True必然会在结尾处结束,其余的,因为第一个值绑定,将按第二个值排序.