python - 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"},
]
而它现在有键,但是一个空值。这个或原始输入的解决方案对我同样有效。
非常感谢任何指针或想法。
解决方案
您可以使用生成器表达式过滤掉,然后使用 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'}]
推荐阅读
- ruby-on-rails - Rails Devise 登录 - 可以选择任何角色(一对多关系)
- python - PyCharm 在不同文件夹中导入同名文件
- sql-server - 数据访问模式表或视图的 SSIS OLEDB 目标插入失败
- swift - Https URL 上的 WKWebView 不支持的 URL 错误
- javascript - Vue-google-map 自动完成两种方式绑定不起作用
- odata - OData 序列化
- r - 可以让 set.seed 每次在 R 中使用后自动返回到初始种子吗?
- android - 根据定义的大小调整 Android Webview 的大小
- javascript - 如何在 React Native 中创建循环列表
- sql - 在字符串中的数字之前添加字符串