#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Created by xuehz on 2017/2/23
from collections import OrderedDict
import collections
print('Regular dictionary:')
d = {}
d['a'] = 'A'
d['b'] = 'B'
d['c'] = 'C'
d['d'] = 'D'
d['e'] = 'E'
for k, v in d.items():
print(k, v)
print('
OrderedDict:')
d = collections.OrderedDict()
d['a'] = 'A'
d['b'] = 'B'
d['c'] = 'C'
d['d'] = 'D'
d['e'] = 'E'
for k, v in d.items():
print(k, v)
"""
Regular dictionary:
c C
d D
b B
a A
e E
可以看到通常字典不是以插入顺序遍历的。
OrderedDict:
a A
b B
c C
d D
e E
"""
d = OrderedDict()
d['foo'] = 1
d['bar'] = 2
d['spam'] = 3
d['grok'] = 4
# Outputs "foo 1", "bar 2", "spam 3", "grok 4"
print(d)
#OrderedDict([('foo', 1), ('bar', 2), ('spam', 3), ('grok', 4)])
for key in d:
print(key, d[key])
import json
print(json.dumps(d)) #{"foo": 1, "bar": 2, "spam": 3, "grok": 4}
"""
OrderedDict 内部维护着一个根据键插入顺序排序的双向链表。
每次当一个新的元素插入进来的时候, 它会被放到链表的尾部。对于一个已经存在的键的重复赋值不会改变键的顺序。
一个 OrderedDict 的大小是一个普通字典的两倍
"""