持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情
介绍
OrderedDict是有序字典,属于python内置dict 的子类,因此普通字典有的内置方法和各种操作OrderedDict同样也支持,而且相较于dict来讲多了对字典进行排序的功能。
在python.3.7及以上版本中,dict 也有了记住写入顺序的功能,但是二者之间依然有很多的不同点:
- dict通常用来做映射,对于其中数据的顺序并不是看的非常重要;
- OrderedDict更加侧重于数据的顺序操作;
- 某些内置方法使用上不同,具体的在下文使用中进行介绍。
使用
popitem
在python内置的dict 中,该方法会随机删除dict 中的一组键值对,并以元组的方式返回这组数据,而在OrderedDict中,该方法有一个last参数,如果last=True(默认),则按照LIFO后进先出的顺序删除一组键值对,否则就按照FIFO先进先出的顺序删除一组键值对。
from collections import OrderedDict
d = OrderedDict.fromkeys('abcde')
d.popitem()
('e', None)
d
OrderedDict([('a', None), ('b', None), ('c', None), ('d', None)])
#last=False时,弹出第一个
d = OrderedDict.fromkeys('abcde')
''.join(d.keys())
'abcde'
d.popitem(last=False)
''.join(d.keys())
'bcde'
move_to_end
move_to_end(key, last=True)是OrderedDict独有的方法,该方法的作用是可以将key移动到有序字典的任意一端,如果last=True,则将这一组键值对移动到最右端,否则,移动至最左端,如果key不存在则会抛出KeyError的异常。
from collections import OrderedDict
d = OrderedDict.fromkeys('abcde')
d.move_to_end('b')
''.join(d.keys())
'acdeb'
d
OrderedDict([('a', None), ('c', None), ('d', None), ('e', None), ('b', None)])
d.move_to_end('b', last=False)
''.join(d.keys())
'bacde'
reversed
该方法也是OrderedDict独有的方法,python内置的dict并没有该方法,该方法可以对字典进行逆序排序。
d = OrderedDict.fromkeys('abcde')
list(reversed(d))
['e', 'd', 'c', 'b', 'a']
其他方法
除了上面介绍的三种方法之外,OrderedDict和dict的其他方法都是通用的,直接使用即可。
总结
这里来总结一下OrderedDict和dict二者一些内置方法使用上的共同点和区别,这样在使用的时候会更加的得心应手。
| 传统字典方法 | OrderedDict方法 | 差异 |
|---|---|---|
| clear | clear | |
| copy | copy | |
| fromkeys | fromkeys | |
| get | get | |
| items | items | |
| keys | keys | |
| pop | pop | |
| popitem | popitem | OrderedDict 类的 popitem() 方法有last参数来指定弹出哪个元素。 |
| setdefault | setdefault | |
| update | update | |
| values | values | |
| move_to_end | 可以有效地将元素移动到任一端。 |