Py学习  »  Python

为什么Python的sorted()方法不反转字典中具有相同值的键的顺序?

mathsman • 4 年前 • 751 次点击  

在为今年的代码问题做准备的时候,我遇到了以下奇怪的问题。假设我们有以下Python字典:

d = {'a':5, 'b':4, 'c':4, 'd':2, 'e':3, 'f':1}

如果我们按字典的键来分类,我们会得到以下结果:

>>>print(sorted(d, key=d.get))
['f','e','d','c','b','a']

现在,如果我们试图颠倒这个顺序,我们得到以下结果:

>>>print(sorted(d, key=d.get, reverse=True))
['a','c','b','d','e','f']

这给我提出了两个问题:

  1. 为什么原始的按键排序列表 c 之前 b 尽管事实上,当遍历字典时,它第一次看到 4 带着钥匙 ?
  2. 为什么颠倒的顺序保持这个顺序,而不是颠倒在原始排序中找到的键的顺序?

我相信有其他方法可以解决这个问题,但现在我想知道 sorted 方法是导致这种情况的原因。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/50104
 
751 次点击  
文章 [ 1 ]  |  最新文章 4 年前
user2357112 supports Monica
Reply   •   1 楼
user2357112 supports Monica    4 年前

reverse=True 并不意味着对输入进行排序然后将其反转。 反向=真 means 反转 比较结果 :

reverse是一个布尔值。如果设置为True,则对列表元素进行排序,就像对每个比较进行了反转一样。

排序仍然是稳定的,因此在比较顺序上相等的元素保持它们在输入中出现的顺序。


现在,你可能会想,嘿,输入中的“c”不在“b”之前!这意味着您必须使用Python版本,其中dict不保留插入顺序,因此dict的顺序不是您在源代码中编写项的顺序。命令 sorted 它的输入本质上是任意的。如果您想要一个保持顺序的dict,就必须使用一个更新的Python或 collections.OrderedDict .