如果密钥存在,则按密钥对字典的字典列表进行排序

Bra*_*rad 3 python sorting

我有一个这样的词典列表:

[{"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方法可以实现我的目标而不会完成所有这些.

mhl*_*ter 9

退房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.(可以跳过该参数,但我将其包括在内)