如何有效地对具有函数的OrderedDict排序?

时间:2019-09-16 07:10:36

标签: python

如果我需要对OrderedDict进行排序,我曾经使用过这种运行良好的语句:

from collections import OrderedDict

# defining a dictionary
od = OrderedDict({'a': 5, 'b': 10, 'c': 7})

# ... some changes like adding new keys, removing old keys, etc.

# sorting the dictionary
od_sorted = OrderedDict(sorted(od.items(), key=lambda e: e[1]))

但是它有一个缺点:我创建了一个新的OrderedDict实例和列表实例(通过sorted),如果原始字典很大,则在内存使用方面可能会很昂贵。 有没有一种方法可以在原始字典中执行排序而又不读取新实例或其他对象?我希望找到类似od.sort(key=lambda ...)的东西,但没有发现类似的东西:

>>> dir(od)
['__class__', '__contains__', '__delattr__', '__delitem__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'move_to_end', 'pop', 'popitem', 'setdefault', 'update', 'values']

我当然看到了问题How to sort OrderedDict of OrderedDict?。关于建议的方法的效率,它什么也没说。

1 个答案:

答案 0 :(得分:-1)

在您的情况下,您仍然可以使用普通dict而不是OrderedDict,因为您不必担心插入顺序。

但是,如果您真的想将排序工作转移给第三方

您仍然可以使用 https://github.com/grantjenks/python-sortedcontainers/