gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:11:53 25 4
gpt4 key购买 nike

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

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com