如果我需要对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]))
但是它有一个缺点:我创建了一个新的orderedict实例和list实例(bysorted
),如果原始字典很大,那么在内存使用方面可能会非常昂贵。有没有一种方法可以在原始字典中执行排序,而不必创建新实例或其他对象?我本想找到类似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?。这并没有提到所建议的方法的效率。你知道吗
在您的情况下,您仍然可以使用普通dict而不是OrderedDict,因为您不担心插入顺序。你知道吗
但是如果你真的想把分拣工作交给第三方
你还是可以用的 https://github.com/grantjenks/python-sortedcontainers/
相关问题 更多 >
编程相关推荐