python 有序字典 OrderedDict

x33g5p2x  于2021-11-10 转载在 Python  
字(1.0k)|赞(0)|评价(0)|浏览(318)

首先,为什么要用有序字典?

个人感觉有3个好处

1)取值的时候不用遍历,比list列表快捷,高效。

2)又有顺序,比普通的字典更好管理。

3)可以开头取出,结尾取出,有队列的优点,又可以按key取值,比队列方便实用。

有序字典的顺序是你插入时候的顺序

不是自动排序,

import heapq

import numpy as np

if __name__ == '__main__':
    import collections

    dic = collections.OrderedDict()

    dic[1] = 'v1'

    dic[3] = 'v3'
    dic[4] = 'v3'
    dic[2] = 'v2'

    for k, v in dic.items():
        print( k, v)

popitem()是取最后一条数据,最新插入的: 

if __name__ == '__main__':
    import collections

    dic = collections.OrderedDict()


    dic[3] = 'v3'
    dic[4] = 'v4'
    dic[2] = 'v2'
    dic[1] = 'v1'
    print(dic)

    #最新插入的,最后一条
    print(dic.popitem())
    dic[8] = 'v8'
    #最先插入的,第1条
    print(dic.popitem(last=False))

结果是2,v2

获取长度:

print(len(dic))

再看几个例子:

dd = {"banana": 3, "apple":4, "pear": 1, "orange": 2}

#按key排序

kd = collections.OrderedDict(sorted(dd.items(), key=lambda t: t[0]))

print kd

#按照value排序

vd = collections.OrderedDict(sorted(dd.items(),key=lambda t:t[1]))

print vd

#输出

OrderedDict([("apple", 4), ("banana", 3), ("orange", 2), ("pear", 1)])

OrderedDict([("pear", 1), ("orange", 2), ("banana", 3), ("apple", 4)])

相关文章