首页 > 解决方案 > Python:如何在没有键的情况下制作排序的跳过/删除字典?

问题描述

假设我有以下数组:

pets = [
    {"owner": "Rick", "pet": "Fido"},
    {"owner": "Peter", "pet": "Hunter"},
    {"pet": "Dobbie"},
    {"owner": "Mason", "pet": "Tickles"},
]

我正在寻找一种(最有效的)方法来{"pet": "Dobbie"}完全从列表中删除,同时对其进行排序。

如果我这样做:

sorted(pets, key=lambda k: k["owner"])

我会得到一个错误,说它没有在第三个元素中找到键。

如果我这样做:

sorted(pets, key=lambda k: k["owner"] if k.get("owner") else "ZZZ")

它只会将其添加到列表的末尾:

[
    {"owner": "Mason", "pet": "Tickles"},
    {"owner": "Peter", "pet": "Hunter"},
    {"owner": "Rick", "pet": "Fido"},
    {"pet": "Dobbie"},
]

还有一个加号/替代输入:

[
    {"owner": "Mason", "pet": "Tickles"},
    {"owner": "Peter", "pet": "Hunter"},
    {"owner": "Rick", "pet": "Fido"},
    {"owner": None, "pet": "Dobbie"},
]

而它现在有键,但是一个空值。这个或原始输入的解决方案对我同样有效。

非常感谢任何指针或想法。

标签: pythonsortingdictionarykey

解决方案


您可以使用生成器表达式过滤掉,然后使用 lambda 排序

>>> sorted((i for i in pets if 'owner' in i), key=lambda k:k['owner'])
[{'owner': 'Mason', 'pet': 'Tickles'},
 {'owner': 'Peter', 'pet': 'Hunter'},
 {'owner': 'Rick', 'pet': 'Fido'}]

推荐阅读