从元组列表转换后在python词典中丢失排序顺序

时间:2018-08-09 13:46:32

标签: python sorting dictionary

因此,我有一个需要按值排序的字典。我使用以下Python3函数对它们进行排序,该函数返回已排序的数据作为元组列表。

def sorter(data):
    return  sorted(data.items(), key=lambda kv: kv[1], reverse=True)

它可以完美地对数据进行排序,但是当我通过

将此列表转换回字典时
dict(sorter(data))

它将丢失顺序,并以完全随机的顺序返回字典。 我在这里想念什么?

2 个答案:

答案 0 :(得分:4)

Python中的字典被实现为哈希表,这些哈希表本质上是无序的-确切地说,它们是任意排序的,并且可以在进行任何修改后更改其顺序。

这是changed in Python 3.7,词典保持其插入顺序。但是依靠它会减少代码的可移植性。

如果要在所有Python版本上保持顺序,请使用OrderedDict

from collections import OrderedDict
OrderedDict(sorter(data))

答案 1 :(得分:1)

正如评论所说,字典是无序的(直到Python 3.7)。

如果您需要命令字典,请使用恰当命名的collections.OrderedDict

import collections

def sorter(data):
    return sorted(data.items(), key=lambda kv: kv[1], reverse=True)

d = collections.OrderedDict(sorter(data))