mat*_*man 4 python sorting dictionary python-3.x
当我遇到以下怪异问题时,我正在为解决一些古老的Code Advent问题做准备。假设我们有以下Python字典:
d = {'a':5, 'b':4, 'c':4, 'd':2, 'e':3, 'f':1}
Run Code Online (Sandbox Code Playgroud)
如果按字典的键对字典进行排序,则会得到以下结果:
>>>print(sorted(d, key=d.get))
['f','e','d','c','b','a']
Run Code Online (Sandbox Code Playgroud)
现在,如果我们尝试逆转此顺序,则会得到以下结果:
>>>print(sorted(d, key=d.get, reverse=True))
['a','c','b','d','e','f']
Run Code Online (Sandbox Code Playgroud)
这给我提出了两个问题:
c之前列出?b4b我确定还有其他方法可以解决此问题,但现在我对sorted导致此问题的方法的机理感到好奇。
reverse=True并不意味着对输入进行排序然后将其反转。reverse=True 表示反转比较结果:
reverse是一个布尔值。如果设置为True,则对列表元素进行排序,就好像每个比较都被反转一样。
排序仍然是稳定的,因此按比较顺序相等的元素将按在输入中出现的顺序保留。
现在,您可能会想,嘿,输入中的“ c”不在“ b”之前!这意味着您必须使用字典不保留插入顺序的Python版本,因此字典的顺序不是您在源代码中编写项目的顺序。该命令sorted看到其输入基本上是任意的。如果要保留订单字典,则必须使用较新的Python或collections.OrderedDict。
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |