【问题标题】:Sort a dictionary in decreasing order and in increasing order when there is a same number当有相同的数字时,按降序和升序对字典进行排序
【发布时间】:2023-03-24 12:46:01
【问题描述】:

我需要在 python 中按降序对字典进行排序,但是当字典有两倍的数字时,我需要按升序对这些数字进行排序:

例子:

字典:

t = {0: 8, 1: 4, 2: 4, 3: 0, 4: 3, 5: 6, 6: 8, 7: 8, 8: 1, 9: 3}

我的代码:

dict(sorted(t.items(), reverse=True, key=lambda item: item[1]))

输出:

{0: 8, 6: 8, 7: 8, 5: 6, 1: 4, 2: 4, 4: 3, 9: 3, 8: 1, 3: 0}
                         ^^^^^^^^^^

需要输出:

{0: 8, 6: 8, 7: 8, 5: 6, 2: 4, 1: 4, 4: 3, 9: 3, 8: 1, 3: 0}
                         ^^^^^^^^^^ 

如何使用lambda 函数做到这一点?

提前感谢您的任何回复

【问题讨论】:

  • 让我直说。您希望按值按降序对字典进行排序,但对于相同的值排序键按升序排序。对吗?
  • 您预期的输出与您的要求相矛盾。当值相等时,所需的输出实际上具有 递减 顺序的键。
  • @trincot,这就是我问的原因。对于值 8,增加键顺序。对于值 4,降低键顺序。
  • 当字典有两倍的数字时你的意思是正好两个,还是至少两个?跨度>
  • 另外,对于这种操作,我个人更喜欢使用explicit function而不是lambda。更容易编写、扩展和调试。

标签: python sorting lambda


【解决方案1】:

若要在值相同的情况下按降序获取键,只需在 lambda 函数中添加键即可:

key=lambda item: (item[1], item[0])

由于这确实颠倒了item 的顺序,您也可以这样做:

key=lambda item: item[::-1]

【讨论】:

    猜你喜欢
    • 2020-12-10
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2019-07-17
    • 2022-01-09
    • 2015-08-30
    • 1970-01-01
    • 2019-04-19
    相关资源
    最近更新 更多