Python之OrderedDict有序字典

Python之OrderedDict有序字典

文章目录

  • Python之OrderedDict有序字典
    • 1、定义
    • 2、初始化
    • 3、排序
    • 4、常用函数
    • 5、与Dict区别

1、定义

python中字典Dict是利用hash存储,因为各元素之间没有顺序。OrderedDict听名字就知道他是 按照有序插入顺序存储 的有序字典。 除此之外还可根据key, val进行排序。

2、初始化

2.1 先初始化定义一个OrderedDict,然后按照键值对插入,此时dict可以记录插入字典的顺序

import collections
d = collections.OrderedDict()
d["name"] = "muya"
d["age"] = 25
d["money"] = "Zero"

for key, value in d.items():
    print(key, value)

# 输出:

# name muya

# age 25

# money Zero

 2.2  在定义时初始化好键值对,但这些初始化的内容无法实现有序。不过之后再对该字典进行插入的键值仍然是有序的。

import collections

d = collections.OrderedDict(name="muya", age=25, money="Zero")
d["dream"] = "have money"
d["other dream"] = "have gf"

for key, value in d.items():
    print(key, value)
    
    
# 输出:

# money Zero

# age 25

# name muya

# dream have money

# other dream have gf

3、排序

​ OrderedDict可根据key 或者val 进行排序。

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)])

4、常用函数

import collections

dic = collections.OrderedDict()


# clear(清空有序字典)

dic.clear()

# copy(拷贝)

new_dic = dic.copy()

# fromkeys(指定一个列表,把列表中的值作为字典的key,生成一个字典)

name = ['tom','lucy','sam']
dic.fromkeys(name)
dic.fromkeys(name,20)

# items(返回由“键值对组成元素“的列表)

dic.items()

# keys(获取字典所有的key)

dic.keys()

# values(获取字典所有的value,返回一个列表)

dic.value()

# move_to_end(指定一个key,把对应的key-value移到最后)

dic["name"] = "muya"
dic["age"] = 25
dic["money"] = "Zero"
dic.move_to_end("name")    # 将name移到最后
dic.move_to_end("money", last=False)   # 设置last为False, 将money移到最前面

# pop(获取指定key的value,并在字典中删除)

dic.pop("name")           # 删除name, 注意必须指定关键字key

# popitem(按照后进先出原则,删除最后加入的元素,返回key-value)

dic.popitem()            # 删除最后加入的
dic.popitem(last=False)  # 删除第一个加入的


# setdefault(获取指定key的value,如果key不存在,则创建)

val = dic.setdefault('k5')

5、与Dict区别

  • 常规的Dict被设计为非常擅长映射操作。 跟踪插入顺序是次要的

  • OrderedDict旨在擅长重新排序操作。 空间效率、迭代速度和更新操作的性能是次要的

  • OrderedDict在频繁的重排任务中还是比Dict更好,这使他更适用于实现各种 LRU 缓存

  • OrderedDict类的 popitem() 方法有不同的签名。它接受一个可选参数来指定弹出哪个元素
    弹出最后面元素:常规的Dict使用 d.popitem() ,OrderedDict类使用od.popitem()

    ​ 弹出第一个元素:常规的Dict使用 (k := next(iter(d)), d.pop(k)) ,OrderedDict类使用od.popitem(last=False)

  • 类有一个 move_to_end() 方法,可以有效地将元素移动到任一端
    将K,V对移到最后面:常规的Dict使用 d[k] = d.pop(k) ,OrderedDict类使用od.move_to_end(k, last=True)

    ​ 将K,V对移到最前面:常规的Dict没有对应功能,OrderedDict类使用od.move_to_end(k, last=False)

  • Python 3.8之前, Dict缺少 reversed() 方法

《AUTOSAR谱系分解(ETAS工具链)》之总目录

你可能感兴趣的:(Python,python,开发语言)