理解Python字典dict的无序

    如对你有帮助,请我喝杯咖啡吧! 打赏

Python中list  tuple都是有序的,他们结构也比较类似,可以进行任意位置的插入,删除
(元祖还有个特性,是只读的,定义后不可修改,这里的不可修改也是针对元祖元素的,s = ('python', 'java', ['asp', 'php'], 'scheme') 你其实是可以修改['asp', 'php']里面的值的,因为它其实是元祖里面的序列)
但是字典是无序的,怎么理解无序?我们举个例子:
dict = {'a':1, 'b':2, 'd':3, 'c':4}
print dict
输出结果:
{'a': 1, 'c': 4, 'b': 2, 'd': 3}
并没有按照定义的顺序输出

但是一般在我们的实际使用场景中,比如接口返回值,我们大部分时候是需要有序返回的,这个时候怎么办?只能先把字段转换成list或者元祖,排好序后,再转成字段,有点坑是不是?

具体实现:
1.按照key进行排序
dict1 = {'a':1, 'b':2, 'd':3, 'c':4}
import operator
sorted_d = sorted(dict1.items(), key=operator.itemgetter(0))
print sorted_d
print dict(sorted_d)
返回结果:
[('a', 1), ('b', 2), ('c', 4), ('d', 3)]
{'a': 1, 'c': 4, 'b': 2, 'd': 3}
可以看出sorted_d可以满足需求,但是格式有点不同,如有需要可以遍历强转
如果强转整个sorted_d,返回还是无序

2.按照value排序
x={2:1,3:4,4:2,1:5,5:3}
import operator
sorted_x=sorted(x.items(),key=operator.itemgetter(1))#这里改为按照item的第二个字符排序,即value排序
print x
print sorted_x
print dict(sorted_x)
返回值:
{1: 5, 2: 1, 3: 4, 4: 2, 5: 3}
[(2, 1), (4, 2), (5, 3), (3, 4), (1, 5)]
{1: 5, 2: 1, 3: 4, 4: 2, 5: 3}