【问题标题】:Sorting a Dictionary by Value then Alphabetically by Key Python3按值排序字典然后按字母顺序按键Python3
【发布时间】:2014-08-31 22:49:02
【问题描述】:

假设我有一本像这样的字典:

h=[('a',5), ('f', 3), ('b',3), ('c',3), ('d',1), ('e',4) ]

我希望它排序为:

[('a',5), ('e',4), ('b',3), ('c',3), ('f',3), ('d',1)]

我可以用 Python 2 解决这个问题:

sortedList= sorted(h.iteritems(),key=lambda(k,v):(-v,k))

我可以通过以下方式在 Python 3 中非常接近:

import operator
sortedList =sorted(h.items(), key=operator.itemgetter(1,0) , reverse=True)

但结果是这样的

[('a',5), ('e',4), ('f',3), ('c',3), ('b',3),  ('d',1)]

我怎样才能扭转决胜局操作?

【问题讨论】:

  • 在 py3 中唯一不允许的是在 lambda 中解包。 lambda x: (-x[1], x[0]) 适用于两个版本。
  • Python 的排序是稳定的 - 所以你可以排序两次
  • h 是一个列表,所以你不能在 python 3 中使用 h.items()

标签: python sorting dictionary


【解决方案1】:

你可以在 python 3 中使用这个对 sorted 函数的调用:

sortedList = sorted(h, key=lambda k: (-k[1], k[0]))

这将给出与 python 2 排序相同的结果:

[('a',5), ('e',4), ('b',3), ('c',3), ('f',3), ('d',1)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 2014-01-18
    相关资源
    最近更新 更多