首页 > 解决方案 > 按键排序字典:单键优先和字母顺序

问题描述

我有一本 Python 字典d

d = { 
    'a': 1,
    'b': 2,
    'c': 3,
    'd': 4,
}

我想这样排序:

  1. 有值的键x是第一个。
  2. 其他所有内容均按字母顺序排序。

因此,如果x = 'c'那时我希望输出为:

>>> print(new_d)
>>> { 'c': 3, 'a': 1, 'b': 2, 'd': 4}

有没有一种直接/简单/ Pythonic的方法来做到这一点?是的,我已经看到并理解了如何按值对字典进行排序的问题的大量答案?以及如何按键对字典进行排序?

标签: pythonsortingdictionary

解决方案


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}

推荐阅读