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

标签 python python-3.x sorting dictionary

当我遇到以下奇怪的问题时,我正在解决一些旧的 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']

这向我提出了两个问题:
  • 为什么原来的sort by keys列表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/

    相关文章:

    python - 排除Python3的map函数中的空值

    python - 为什么返回自身的函数在 python 3 中最大递归

    javascript - 有效地替换字符串中的所有重音字符?

    asp.net - LINQ:按列表中唯一项目的数量排序<string>

    c++ - 在列表中插入 vector

    android - 如何使用 android 模拟器(使用 Ubuntu 12.04 + kivy)测试我的 python 应用程序?

    python - PyMongo——游标迭代

    python - 在python中打印表面拟合方程

    python - 删除 NumPy 数组中的连续重复项

    python-3.x - 在 Virtualenvwrapper 中设置解释器