【问题标题】:Sorting keys of dictionary according to more than one criteria - Python 3.0根据多个标准对字典的键进行排序 - Python 3.0
【发布时间】:2022-01-09 12:05:30
【问题描述】:

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

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

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

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

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

提前感谢您的帮助!

【问题讨论】:

  • sorted(word_values_dict.items(), key=lambda x: (x[1], x[0])) > 首先使用x[1] - values in dict排序,如果相同则使用x[0] - dict key name排序

标签: python sorting dictionary key alphabetical


【解决方案1】:

您可以在 sorted 调用中将 lambda 用作 key function

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

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

sorted 函数中的key 参数可以接受一个返回多个值的函数,如果第一个值之间存在平局,则比较将移至键中的下一个值。

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

【讨论】:

  • 感谢您的回答。这对我很有帮助!
【解决方案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}

【讨论】:

  • 感谢您提供有关如何按降序排序的提示,我肯定会在另一个练习中用到它!感谢您的帮助。
猜你喜欢
  • 2011-12-11
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
相关资源
最近更新 更多