【发布时间】:2015-01-11 05:13:30
【问题描述】:
我能找到的所有示例(in the documentation 等)都通过将数据传递给构造函数来定义 OrderedDicts。来自文档:
# regular unsorted dictionary
d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
# dictionary sorted by key
OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
另一方面,可以通过不向构造函数提供参数来初始化 OrderedDict,这会导致它保留键值对添加的顺序。
我正在寻找一种类似于以下的构造,除了没有“d.items()”。本质上,我要求它记住一个机制而不提供一个例子,这听起来可能很疯狂。我唯一的选择是通过为单个项目提供初始“d”(如下)来“破解”这个问题,还是有更好的方法?
OrderedDict(sorted(d.items(), key=lambda t: t[0]))
谢谢!
【问题讨论】:
-
是的,这是默认行为吗?
-
排序字典不会在插入时重新排序其内容。它们记住插入顺序并且可以排序,但它们不只是在添加键时自动排序。为此,您正在寻找类似 SortedCollection 的东西。 IIRC 有一个使用 bisect 模块的配方 (code.activestate.com/recipes/577197-sortedcollection),但仅靠 OrderedDict 是不够的。
-
您可以自己滚动,或许可以考虑使用
heapq来保留内部顺序
标签: python python-2.7 python-3.x ordereddictionary