【问题标题】:How to sort dictionary by decreasing integer value and then by decreasing string key?如何通过减少整数值然后减少字符串键来对字典进行排序?
【发布时间】:2022-01-19 09:25:13
【问题描述】:

给定字典,

test_dict = {"A" : 1, "B" : 3, "C" : 2, "D" : 3, "E" : 2} 

我想通过递减值对项目进行排序,如果值相等,则通过递减键
我试过了:

res = {val[0] : val[1] for val in sorted(test_dict.items(), key = lambda x: (-x[1], -x[0]))}

我收到以下错误:

Traceback (most recent call last):
File "<string>", line 12, in <module>
  File "<string>", line 12, in <lambda>
TypeError: bad operand type for unary -: 'str'

【问题讨论】:

  • x[0] 是str,您可以使用ord(x[0]) 来获取它的ASCII 值。
  • 仅供参考:从技术上讲,像您正在构建的 `dict` 不会排序,即使您按排序顺序插入它也是如此。如果它被排序,那或多或少是一个实现细节。 (例如 python 3.7 maintains order, apparently 但并非所有 python 3 版本都这样做)
  • @lucidbrot 从 3.7 开始,按插入顺序排序的字典是一种语言功能,需要在所有实现中保持。
  • @JoseManueldeFrutos 也许您需要按排序顺序迭代键,或者您可能需要知道最后插入的键。
  • @timgeb 你是对的(对于足够新版本的python),但我仍然觉得它很脏。我现在已经问过whether relying on it is good practise,希望能对此有所了解。

标签: python python-3.x dictionary


【解决方案1】:

您的键是字符串,您不能将其设为负值。试试这个:

res = {val[0] : val[1] for val in 
       sorted(test_dict.items(), key=lambda x: (x[1], x[0]), reverse=True)}

【讨论】:

    【解决方案2】:

    使用dict(sorted(test_dict.items(), key=lambda kv: kv[::-1], reverse=True))

    【讨论】:

      猜你喜欢
      • 2022-01-10
      • 2019-11-18
      • 2014-12-30
      • 2017-02-14
      • 2022-01-13
      • 2017-06-12
      • 2012-04-12
      相关资源
      最近更新 更多