python 有序字典_Python 有序字典(OrderedDict)与 普通字典(dict)

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 inmy_dict.items():print(key, value)

输出:

money 80girl Tailand

age26hourse None

name lowman

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

注意:

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

2.有序字典

importcollections

my_order_dict= collections.OrderedDict()

my_order_dict["name"] = "lowman"

my_order_dict["age"] = 45

my_order_dict["money"] = 998

my_order_dict["hourse"] = Nonefor key, value inmy_order_dict.items():print(key, value)

输出:

name lowman

age 45

money 998

hourse None

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

注意:

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

如下面这个列子:

importcollections

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

输出:

hourse None

age45money998name lowman

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