python collections.OrderedDict有序字典的使用

detectron2中大量的使用OrderedDict-有序字典,有序字典可以按字典中元素的插入顺序来输出

python的基础数据类型中的字典类型分为:无序字典与有序字典两种类型。

1、无序字典(普通字典)

遍历一个普通字典,返回的数据和定义字典时的字段顺序是不一致的。

my_dict = dict()
my_dict["name"] = "lowman"
my_dict["age"] = 26
my_dict["girl"] = "Tailand"
my_dict["money"] = 80
my_dict["hourse"] = None
for key, value in my_dict.items(): 
  print(key, value)

输出:

money 80
girl Tailand
age 26
hourse None
name lowman

2、有序字典

有序字典可以按字典中元素的插入顺序来输出。

import collections

my_order_dict = collections.OrderedDict()
my_order_dict["name"] = "lowman"
my_order_dict["age"] = 45
my_order_dict["money"] = 998
my_order_dict["hourse"] = None

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

按插入顺序,输出:

name lowman
age 45
money 998
hourse None

注意:

如果有序字典中的元素一开始就定义好了,则这些元素输出无序。

有序字典的作用只是记住元素插入顺序并按顺序输出。如果有序字典中的元素一开始就定义好了,后面没有插入元素这一动作,那么遍历有序字典,其输出结果仍然是无序的,因为缺少了有序插入这一条件,所以此时有序字典就失去了作用,所以有序字典一般用于动态添加并需要按添加顺序输出的时候。

import collections
my_order_dict = collections.OrderedDict(name="lowman", age=45, money=998, hourse=None)
for key, value in my_order_dict.items():
    print(key, value)

输出:

hourse None
age 45
money 998
name lowman

有序实现机制:

实际OrderedDict内部维护了一个双向链表,他会根据元素加入的顺序来排列键的位置,第一个新加入的元素被放置在链表的末尾,对已存在的键做重新赋值,不会改变键的顺序,所以OrderedDict的大小是普通字典的2倍多,大数据使用时要考虑实际的额外开销。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jingbo1801

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值