python中Dict与OrderedDict
2024-08-31 14:32:31
使用dict
时,Key是无序的。在对dict
做迭代时,我们无法确定Key的顺序。
如果要保持Key的顺序,可以用OrderedDict
:
from collections import OrderedDict
d = dict([('a', 1), ('b', 2), ('c', 3)])
d # dict的Key是无序的
{'a': 1, 'c': 3, 'b': 2}
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
od # OrderedDict的Key是有序的
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
注意,OrderedDict
的Key会按照插入的顺序排列,不是Key本身排序:
od = OrderedDict()
od['z'] = 1
od['y'] = 2
od['x'] = 3
od.keys() # 按照插入的Key的顺序返回
['z', 'y', 'x']
OrderedDict
可以实现一个FIFO(先进先出)的dict,当容量超出限制时,先删除最早添加的Key:
from collections import OrderedDict class LastUpdatedOrderedDict(OrderedDict): def __init__(self, capacity):
super(LastUpdatedOrderedDict, self).__init__()
self._capacity = capacity def __setitem__(self, key, value):
containsKey = 1 if key in self else 0
if len(self) - containsKey >= self._capacity:
last = self.popitem(last=False)
print 'remove:', last
if containsKey:
del self[key]
print 'set:', (key, value)
else:
print 'add:', (key, value)
OrderedDict.__setitem__(self, key, value)
最新文章
- c#查找string数组的某一个值的索引
- c++中的指针之指针在数组
- groups, usermod, chown, chgrp, chmod
- .net学习笔记---lambda表达式(自执行方法)
- XSS获取cookie
- java反射快速入门(二)
- [记录 ]升级IOS 9 和 XCode 7 引起的问题
- JDK1.8 HashMap中put源码分析
- C: strcpy &; memcpy &; scanf/printf format specifier.. escape characters..
- switch 在什么时候可以不写default
- ORACLE中用rownum分页并排序的SQL语句
- apt-get install 出问题怎么办?
- 一、JSP标签介绍,自定义标签
- Ubuntu16.04搜狗输入法无法输入中文
- Loj 6036 「雅礼集训 2017 Day4」编码 - 2-sat
- Struts2漏洞利用工具下载(更新2017-V1.8版增加S2-045/S2-046)
- ListView 指定显示最后一行,scrollView显示最底部
- 【GIS】postgres(postgis) --》nodejs+express --》geojson --》leaflet
- PHP使用mysqli扩展连接MySQL数据库
- 学习Java的方法
热门文章
- Java连接Mysql的基本用法
- 牛客国庆集训派对Day1:J:Princess Principal(栈模拟求括号匹配)
- openfaas 了解
- 【HTML5】Canvas绘图详解-1
- Python 函数 min()
- 一个detect问题引发的一系列思考
- 读取zip文件,不解压缩直接解析,支持文件名中文,解决内容乱码
- 生成器+列表生成式,生成器可以节省内存,随时调取函数运行,以及实现多线程运行函数,__next__()和.send(参数)的区别,a,b=b,a+b其实是元祖的用法,出现异常状态用try...except StopIteration来处理
- 第2章 深入分析java I/O的工作机制(上)
- Py修行路 python基础 (三)字典