- Python算法详解
- 张玲玲
- 474字
- 2020-06-27 17:50:51
2.3.4 使用OrderedDict创建有序字典
在Python程序中创建一个字典后,不但可以对字典进行迭代或序列化操作,而且也能控制其中元素的排列顺序。下面的实例文件youxu.py演示了创建有序字典的过程。
源码路径:daima\第2章\youxu.py
import collections dic = collections.OrderedDict() dic['k1'] = 'v1' dic['k2'] = 'v2' dic['k3'] = 'v3' print(dic)
执行后会输出:
OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
再看下面的实例文件qingkong.py,它演示了清空有序字典中数据的过程。
源码路径:daima\第2章\qingkong.py
import collections dic = collections.OrderedDict() dic['k1'] = 'v1' dic['k2'] = 'v2' dic.clear() print(dic)
执行后会输出:
OrderedDict()
再看下面的实例文件xianjin.py,功能是使用函数popitem()按照后进先出原则,删除最后加入的元素并返回键值对。
源码路径:daima\第2章\xianjin.py
import collections dic = collections.OrderedDict() dic['k1'] = 'v1' dic['k2'] = 'v2' dic['k3'] = 'v3' print(dic.popitem(),dic) print(dic.popitem(),dic)
执行后会输出:
('k3', 'v3') OrderedDict([('k1', 'v1'), ('k2', 'v2')]) ('k2', 'v2') OrderedDict([('k1', 'v1')])
注意:在Python的OrderedDict内部维护了一个双向链表,它会根据元素加入的顺序来排列键的位置。第1个新加入的元素被放置在链表的末尾,接下来会对已存在的键重新赋值而不会改变键的顺序。开发者需要注意的是,OrderedDict的大小是普通字典的两倍多,这是由于额外创建的链表所致。因此,如果想构建一个涉及大量OrderedDict实例的数据结构(例如从CSV文件中读取100000行内容到OrderedDict列表中),那么需要认真对应用做需求分析,从而推断出使用OrderedDict所能带来的好处是否能大过因额外的内存开销而带来的损失。