【问题标题】:how to represent a sorted dictionary? [duplicate]如何表示已排序的字典? [复制]
【发布时间】:2016-03-31 11:46:04
【问题描述】:

我试图按值对字典进行排序,我看到了这篇文章: Sort a Python dictionary by value

我只需要在列表中获取具有较大值的键,而不是在元组中,所以我写了这个(看起来有点笨拙)。 但是如果 2 个键具有相同的值,我需要按字母方式对它们进行排序。

这就是我试图做的:

import operator
final_sort=[]
sorted_x = sorted(x.items(), key=operator.itemgetter(1))
for item in sorted_x[::-1]:
    final_sort.append(item[0])

但这仅适用于数字值条件。

例如:

inp : x = {'a': 2, 'b': 4, 'c': 6, 'd': 6, 'e': 0}
out : ['c', 'd', 'b', 'a', 'e']

【问题讨论】:

  • 你能给我们举一个你的 dict 和期望输出的例子吗?
  • 是的,我添加了一个示例。谢谢

标签: python sorting dictionary


【解决方案1】:

迭代字典产生键;您可以将字典本身传递给sorted

>>> x = {'a': 2, 'b': 4, 'c': 6, 'd': 6, 'e': 0}
>>> sorted(x, key=lambda key: (-x[key], key))
['c', 'd', 'b', 'a', 'e']

【讨论】:

  • 这仅按值排序,而问题指定“但是如果 2 个键具有相同的值,我需要以字母方式对它们进行排序。”由于字典顺序是任意的,所以不能保证当前的'c', 'd'
  • @TigerhawkT3,感谢您的评论。我相应地更新了答案。
  • 非常感谢。 @TigerhawkT3 谢谢你的参考,这正是我问的!无论如何,这些答案对于 python 3 来说更好,这并没有让我像他们在另一篇文章中那样解压元组。
【解决方案2】:

这是我的看法,分两步

>>> x = {'a': 2, 'b': 4, 'c': 6, 'd': 6, 'e': 0}
>>> sorted(x.items(), key=lambda i: i[1], reverse=True)
[('c', 6), ('d', 6), ('b', 4), ('a', 2), ('e', 0)]
>>> [x[0] for x in sorted(x.items(), key=lambda i: i[1], reverse=True)]
['c', 'd', 'b', 'a', 'e']

【讨论】:

  • 这仅按值排序,而问题指定“但如果 2 个键具有相同的值,我需要以字母方式对它们进行排序。”由于字典顺序是任意的,所以不能保证当前的'c', 'd'
猜你喜欢
  • 2012-08-11
  • 2013-07-13
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 2013-03-14
  • 2014-06-14
相关资源
最近更新 更多