OrderedDict对象-collections- 容器数据类型(31)Python语言(必读进阶学习教程)(参考资料)
有序词典就像常规词典一样,但它们记住了项目的插入顺序。迭代有序字典时,将按照首次添加键的顺序返回项目。
- class
collections.
OrderedDict
([ items ] ) - 返回一个dict子类的实例,支持通常的
dict
方法。一个OrderedDict是记住的键首先被插入的顺序的字典。如果新条目覆盖现有条目,则原始插入位置保持不变。删除条目并重新插入它将使其移至最后。3.1版中的新功能。
popitem
(last = True )popitem()
有序字典的方法返回并删除(键,值)对。如果last为真,则以LIFO顺序返回对,如果为false,则以FIFO顺序返回 。
move_to_end
(key,last = True )- 将现有键移动到有序字典的任一端。该项目被移动到右端,如果最后是真(默认),或一开始,如果最后一个是假的。
KeyError
如果密钥不存在则引发:>>> >>> d = OrderedDict.fromkeys('abcde') >>> d.move_to_end('b') >>> ''.join(d.keys()) 'acdeb' >>> d.move_to_end('b', last=False) >>> ''.join(d.keys()) 'bacde'
版本3.2中的新功能。
除了通常的映射方法之外,有序字典还支持使用反向迭代reversed()
。
OrderedDict
对象之间的等式测试是对顺序敏感的,并且实现为list(od1.items())==list(od2.items())
。OrderedDict
对象和其他 Mapping
对象之间的等式测试对常规字典顺序不敏感。这允许OrderedDict
在使用常规字典的任何地方替换对象。
改变在3.5版本:该物品,钥匙,和值的观点 的OrderedDict
,现在支持使用反向迭代reversed()
。
在版本3.6中更改:接受PEP 468,保留了传递给OrderedDict
构造函数及其update()
方法的关键字参数的顺序。
OrderedDict
例子和食谱
由于有序字典会记住其插入顺序,因此它可以与排序结合使用以生成排序字典:
>>> >>> # 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)]) >>> # dictionary sorted by value >>> OrderedDict(sorted(d.items(), key=lambda t: t[1])) OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)]) >>> # dictionary sorted by length of the key string >>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0]))) OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])
删除条目时,新排序的词典会保持其排序顺序。但是,当添加新密钥时,密钥将附加到末尾,并且不会保留排序。
创建一个有序的字典变体也很简单,它可以记住上次插入密钥的顺序。如果新条目覆盖现有条目,则原始插入位置将更改并移至结尾:
class LastUpdatedOrderedDict(OrderedDict): 'Store items in the order the keys were last added' def __setitem__(self, key, value): if key in self: del self[key] OrderedDict.__setitem__(self, key, value)
有序字典可以与Counter
类组合,以便计数器记住首次遇到的订单元素:
class OrderedCounter(Counter, OrderedDict): 'Counter that remembers the order elements are first encountered' def __repr__(self): return '%s(%r)' % (self.__class__.__name__, OrderedDict(self)) def __reduce__(self): return self.__class__, (OrderedDict(self),)
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。