当我遇到以下奇怪的问题时,我正在解决一些旧的 Advent of Code 问题,为今年的问题做准备。假设我们有以下 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']
这向我提出了两个问题:
c
之前 b
尽管在遍历字典时第一次看到4
是带 key 的b
? 我确信还有其他方法可以解决这个问题,但现在我很好奇
sorted
的机制是什么。方法是导致这种情况。
最佳答案
reverse=True
并不意味着对输入进行排序然后将其反转。 reverse=True
means反转比较结果:
reverse is a boolean value. If set to True, then the list elements are sorted as if each comparison were reversed.
排序仍然稳定,因此比较顺序相等的元素按它们在输入中出现的顺序保留。
现在,您可能会想,嘿,'c' 不在输入中的 'b' 之前!这意味着您必须使用 dict 不保留插入顺序的 Python 版本,因此 dict 的顺序不是您在源代码中编写项目的顺序。订单
sorted
看到它的输入基本上是任意的。如果您想要保留顺序的 dict,则必须使用更新的 Python 或 collections.OrderedDict
.
关于python - 为什么 Python 的 sorted() 方法不会反转字典中具有相同值的键的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58966200/