【问题标题】:Sorting an OrderedDict both ascendingly and descendingly对 OrderedDict 进行升序和降序排序
【发布时间】:2020-06-06 23:28:58
【问题描述】:

定义:

diction = {"Book":(1, 2), "Armchair":(2, 2), "Lamp":(1, 3)}

如果要按 item["key"][1] 降序和 "keys" 升序对字典进行排序,那么合适的方法是什么?

期望的输出:

diction = {"Lamp":(1, 3), "Armchair":(2, 2), "Book":(1, 2)}

收到思南的正确答案后注意,我没有问升序或降序排序,你给我发了相关链接!我问要同时做这两个问题,但思南给出的减号技巧并没有解决这个问题。

【问题讨论】:

标签: python sorting ordereddict


【解决方案1】:

主要思想抄自here

from collections import OrderedDict
diction = {"Book":(1, 2), "Armchair":(2, 2), "Lamp":(1, 3)}
diction_list = list(diction.items())
diction = OrderedDict(sorted(diction_list, key=lambda x: (-x[1][1], x[0])))
print(diction)

OrderedDict([('Lamp', (1, 3)), ('Armchair', (2, 2)), ('Book', (1, 2))])

这就是魔法发生的地方:

sorted(diction_list, key=lambda x: (-x[1][1], x[0]))

sorted 为您整理东西。它非常擅长。如果您将key 参数与sort 一起使用,您可以给它一个函数,用于每个要排序的项目。 在这种情况下,我们给出一个lambda,它从元组-x[1][1](这是元组中的第二个值)和键x[0]返回负值。负号使其反向排序。当然,这不适用于非数字值。

OrderedDict 并不是绝对必要的。 Python 在我认为的 3.6 版(或者是 3.7 版?)之后保持 dict 的顺序。 OrderedDict 始终保持相同的顺序,因此我们的 dict 保持有序,与 Python 版本无关。

如需更好的方法,请参阅 Python 文档中的 Sorting HOW TO

【讨论】:

  • 太好了,非常感谢!
猜你喜欢
  • 2016-10-18
  • 1970-01-01
  • 2015-08-30
  • 2020-11-09
  • 2016-11-05
  • 2013-05-13
  • 2013-08-15
  • 2021-08-24
相关资源
最近更新 更多