python - 按键排序字典:单键优先和字母顺序
问题描述
我有一本 Python 字典d
:
d = {
'a': 1,
'b': 2,
'c': 3,
'd': 4,
}
我想这样排序:
- 有值的键
x
是第一个。 - 其他所有内容均按字母顺序排序。
因此,如果x = 'c'
那时我希望输出为:
>>> print(new_d)
>>> { 'c': 3, 'a': 1, 'b': 2, 'd': 4}
有没有一种直接/简单/ Pythonic的方法来做到这一点?是的,我已经看到并理解了如何按值对字典进行排序的问题的大量答案?以及如何按键对字典进行排序?
解决方案
Python 3.7 之前的字典没有排序,但是,您可以对从 获取的元组列表进行排序dict.items
,如果您使用的是 Python 3.7,请dict
从结果中创建一个。lambda
排序键返回一个包含两个元素的列表。第一个元素是键比较的结果,在本例中为x == 'c'
,而第二个元素是与键关联的数值:
d = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
x = 'c'
new_d = sorted(d.items(), key=lambda c:[c[0] != x, c[-1]])
输出:
[('c', 3), ('a', 1), ('b', 2), ('d', 4)]
在 Python 3.7 中:
print(dict(new_d))
输出:
{'c': 3, 'a': 1, 'b': 2, 'd': 4}
推荐阅读
- php - Wordpress/WooCommerce 功能仅适用于特定产品类别
- nginx - Kubernetes 服务的 Nginx 路由
- r - R:如何设置Lambert投影的地图范围?
- c# - 由于调用 GetType() 时出现 StackOverflowException,进程正在终止
- c# - 为什么匿名类型数组中不允许隐式属性名称?
- sql - SSRS - 多值参数
- python - 你能在它自己的初始化器中引用一个类的实例吗?
- docker - Traefik:让我们在没有 [acme.domains] 的情况下加密 onHostRule?
- python - 在 Pandas 中读取 JSON 文件错误以进行文本提取
- identityserver4 - 如何将自定义表添加到 configurationDbContext?