前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python之有序字典(OrderedDict)与 普通字典(dict)

Python之有序字典(OrderedDict)与 普通字典(dict)

作者头像
SEian.G
发布2021-10-22 11:07:18
2.8K0
发布2021-10-22 11:07:18
举报
文章被收录于专栏:SEian.G学习记录

之前我认为python中的字典是无序的,因为它是按照hash来存储的,最近开发过程中对数据序列化之后,返回了OrderedDict类型数据,返回数据格式如下

代码语言:javascript
复制
[OrderedDict([('id', 1), ('prop_code', u'mysql'), ('prop_name', u'MySQL测试'), ('prop_value', u'{"db_structure":"mysql","service_name":"xxxx-mysql.service.xxxx.local","service_port":"4306""topology":{"master":[{"ipaddr":"xx.xx.xx.xx","port":"4306"},{"ipaddr":"xx.xx.xx.xx","port":"4306"},...]}}'), ('prop_status', 1), ('create_time', '2021-10-12T18:45:50'), ('update_time', '2021-10-12T18:45:50'), ('memo', None)])]

下面简单看下OrderedDict和dict的区别:

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

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

代码语言:javascript
复制
my_dict = dict()
 
my_dict["name"] = "test"
my_dict["age"] = 27
my_dict["girl"] = "bob"
my_dict["money"] = 100
my_dict["hourse"] = None
 
for key, value in my_dict.items():
  print(key, value)

输出:

代码语言:javascript
复制
money 100
girl bob
age 27
hourse None
name test

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

注意: Python3.6 改写了 dict 的内部算法,Python3.6 版本以后的 dict 是有序的,所以也就无须再关注 dict 顺序性的问题

2.有序字典

代码语言:javascript
复制
import collections
 
my_order_dict = collections.OrderedDict()
my_order_dict["name"] = "test"
my_order_dict["age"] = 27
my_order_dict["money"] = 100
my_order_dict["hourse"] = None
 
for key, value in my_order_dict.items():
        print(key, value)

输出:

代码语言:javascript
复制
name test
age 27
money 100
hourse None

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

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

如下面这个列子:

代码语言:javascript
复制
import collections
 
my_order_dict = collections.OrderedDict(name="test", age=27, money=100, hourse=None)
for key, value in my_order_dict.items():
    print(key, value)

输出:

代码语言:javascript
复制
hourse None
age 27
money 100
name test

发现输出还是无序的,因为在定义有序字典的同时也定义了初始值,没有存在按序添加的操作,所以有序字典是没有记录插入字段的顺序,最后遍历时,得到数据的顺序仍然是无序的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA的辛酸事儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档