python中Dict与OrderedDict

枫铃3年前 (2021-09-30)Python252

使用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本身排序:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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)

相关文章

Python __slots__限制动态添加变量

Python是一种非常灵...

Python十大常用文件操作

日常对于批量处理文件的需...

python之高级的文件操作shutil模块

shutil --High-level file operations 高级的文件操作模块 os模块提供了对目录或者文件的新建/删除/查看文件属性&...

Python中self的用法

Python中self的用法

在Python类中规定&...

python中的any与all函数的区别

1、all函数用来判断元...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。