我有一个这样的词典列表:
[{"foo" : "bar", "myKey" : "one"},
{"foo" : "bar", "myKey" : "two"},
{"foo" : "bar", "yourKey" : "three"}]
Run Code Online (Sandbox Code Playgroud)
如果存在,我想通过字典中的键对其进行排序.
featured = sorted(filesToWrite, key=lambda k: k["myKey"])
Run Code Online (Sandbox Code Playgroud)
如果"myKey"
不存在,这不起作用. 编辑:如果myKey
字典中不存在,我希望它出现在列表的末尾.
我可以手动循环遍历列表并自己完成,但我确信有一种pythonic方法可以实现我的目标而不会完成所有这些.
退房dict.get
:
featured = sorted(filesToWrite, key=lambda k: ("myKey" not in k, k.get("myKey", None)))
Run Code Online (Sandbox Code Playgroud)
输出:
[{'foo': 'bar', 'myKey': 'one'}, {'foo': 'bar', 'myKey': 'two'}, {'yourKey': 'three', 'foo': 'bar'}]
Run Code Online (Sandbox Code Playgroud)
关键是神奇的事情:
("myKey" in k, k.get("myKey", None)
Run Code Online (Sandbox Code Playgroud)
这是一个两项元组,如:
(True, "one")
Run Code Online (Sandbox Code Playgroud)
第一个元素是True/False,取决于键是否缺失(True出现在False之后not
),第二个元素是所述键的值(如果存在).如果没有,None
.(可以跳过该参数,但我将其包括在内)