有序字典就像普通字典一样,但他们记住了项目插入的顺序。 在迭代有序字典时,将按照首次添加键的顺序返回项目。

用法:

    class collections.OrderedDict([items])

        返回一个字典子类的实例,支持通常的字典方法。

        OrderedDict是一个字典,它记住了键被首次插入的顺序。

        如果新条目覆盖现有条目,则原始插入位置保持不变。

        删除一个条目并重新插入它将会把它移到最后。


    popitem(last=True)

    有序字典的popitem()方法返回并删除(key, value)对。

    如果 last 是 True 或者如果 FIFO(先进先出) 的顺序为false,则按LIFO(后进先出)顺序返回键值对。

    如果last是True,则以LIFO[后进先出]的顺序返回,如果为Flase,则以FIFO[先进先出]顺序返回。


    move_to_end(keylast=True)

    将现有键移至有序字典的任意一端。 如果last为True(默认值),则项目移动到右侧,如果last为false,则移动到开头。 

    如果key不存在,则引发KeyError:

image.png

    除了通常的映射方法外,有序字典还支持reverse()方法进行反向迭代。

    

    OrderedDict对象之间的等式测试是顺序敏感的,并且以 list(od1.items()) == list(od2.items()) 的形式实现。

    OrderedDict对象与其他映射(Mapping)对象之间的等式测试对常规字典对顺序不敏感。

    这允许在使用常规字典的任何地方替换OrderedDict对象。

    版本3.5中更改:OrderedDict的项目,键和值视图现在支持使用reversed()进行反向迭代。

    在版本3.6中更改:随着PEP 468的接受,保留传递给OrderedDict构造函数和update()方法的关键字参数的顺序。

    


OrderedDict Examples and Recipes(OrderedDict示例和食谱)

由于有序字典会记住它的插入顺序,因此它可以与排序结合使用以创建一个排序后的字典:

image.png

    删除条目时,新排序的字典会保持其排序顺序。 但是,当添加新的密钥时,密钥被追加到最后,并且不会保留排序。

    创建一个有序的字典变体也很简单,可以记住上一次插入秘钥的顺序。如果新条目覆盖现有条目,则会更改原始插入位置并移至结尾:

image.png

    有序字典可以与Counter类组合使用,以便计数器记住第一次遇到的顺序元素:

image.png