根据一个以上的标准对字典的键进行排序 - Python 3.0

Sorting keys of dictionary according to more than one criteria - Python 3.0

我正在尝试获取已排序的字典。字典应根据以下两个标准进行排序:

  1. 根据值(整数)
  2. 如果两个键 (str) 具有相同的值,则按字母顺序排序

到目前为止,我已经在我的代码中编写了以下行:

sorted_word_values_dict = dict(sorted(word_values_dict.items(), key=operator.itemgetter(1)))

此代码根据第一个标准正确排序,但如果两个键 (str) 具有相同的值(例如,两者的值为 2),则需要按字母顺序对它们进行排序。我怎样才能在我的代码中包含这个额外的标准?

在此先感谢您的帮助!

给定这本字典:

d = {'c': 1251, 'b': 2372, 'f': 5172, 'a': 2372}

如果要按升序对值进行排序,并按字典顺序对键进行排序:

out = dict(sorted(d.items(), key=lambda x: (x[1],x[0])))

输出:

{'c': 1251, 'a': 2372, 'b': 2372, 'f': 5172}

但是,如果您想按降序对值进行排序(并按字典顺序对键进行排序):

out = dict(sorted(d.items(), key=lambda x: (-x[1],x[0])))

输出:

{'f': 5172, 'a': 2372, 'b': 2372, 'c': 1251}

您可以在 sorted 调用

中将 lambda 用作 key function

以下内容应该会按排序顺序为您提供新的 dict -

sorted_word_values_dict = dict(sorted(word_values_dict.items(), key=lambda x: (x[1], x[0])))

sorted 函数中的 key 参数可以采用 returns 多个值的函数,如果第一个值之间存在平局,则比较将移动到键中的下一个值。

在这个例子中,首先比较x[1](dict value),如果相同,我们再比较x[0](dict key)。