首页新闻找找看学习计划

python字典有序无序?

-1
[待解决问题]

求各位大神帮我解答一下python字典是无序的,这个无序怎么理解,
以前没有注意,最近使用时发现,虽然比如我们想要向字典中添加新的数据无法控制它的顺序,但是每次我们遍历字典输出的时候,输出的顺序都是一样的,用的3.6的解释器,这个跟版本有关系吗,代码如下:

dict1={1:1,3:3,6:6,2:2}
for value in dict1.values():
... print(value)
...
1
3
6
2
for value in dict1.values():
... print(value)
...
1
3
6
2

NIUSHA的主页 NIUSHA | 初学一级 | 园豆:147
提问于:2019-01-22 22:11
< >
分享
所有回答(7)
0

你如果能通过索引的办法访问出数据,那就存在有序

小峰dd | 园豆:202 (菜鸟二级) | 2019-01-22 23:43
0

字典不能用位置下标(1,2....)获取值,所以是无序的

芳华还在 | 园豆:202 (菜鸟二级) | 2019-01-23 08:19
0

支持@二楼

东小东 | 园豆:204 (菜鸟二级) | 2019-01-23 08:49
0

字典都是按照键来便利的,字典前面是键后面的是值,遍历字典都是遍历他的键,便利不出来他的值,但是可以通过枚举来把他的值和下标分开,向字典里添加数据时可以控制他的顺序,通过下标索引,或是通过他的位置,

通过enumerate遍历出值

a ={1:'张',2:'李'}
for index,value in enumerate(a):
print(value)

print('============================')

通过enumerate遍历出下标

a ={1:'张',2:'李'}
for index,value in enumerate(a):
print(index)
print('============================')
a = {1: '张', 2: '李'}

普通遍历,遍历字典

for index in a:
print(index)

========结果========
1
2
============================
0
1
============================
1
2

老鼠蟒蛇 | 园豆:4 (初学一级) | 2019-01-23 09:06

字典是有序的,可以通过下标,位置来判断

支持(0) 反对(0) 老鼠蟒蛇 | 园豆:4 (初学一级) | 2019-01-23 09:07

@老鼠蟒蛇: python 字典只有key=>value ,没有下标,有下标的是列表

支持(0) 反对(0) xiaobaiskill | 园豆:1012 (小虾三级) | 2019-01-23 10:05
0

字典数据是有序的, 但是这个序不是由外部控制, 而是内部字典定位机制的序
所以对外来讲, 数据本身是无序的
你每次遍历的顺序一样, 是因为枚举结果是按内部排序输出

而无序则表示在你无法从外部控制最终的输出顺序

堕落恶魔 | 园豆:354 (菜鸟二级) | 2019-01-23 09:10

如果是你这种说法,python 的列表外部输出也是无序的咯!!

支持(0) 反对(0) xiaobaiskill | 园豆:1012 (小虾三级) | 2019-01-23 10:04

@xiaobaiskill: 列表有序啊....
判断方式看2楼 能用下标访问的就是有序....

支持(0) 反对(0) 堕落恶魔 | 园豆:354 (菜鸟二级) | 2019-01-23 10:06
0

python 的字典确实是 无序,你不能把它当做有序去看待。
python在3 版本之后对很多东西进行了优化包括字典,你看到的有序因为解释器优化了算法,使你的字典看上去有序,实则无序。

xiaobaiskill | 园豆:1012 (小虾三级) | 2019-01-23 10:02
0

没必要纠结无序是啥意思了 , 你就明白不能按照列表那样处理就行了。 只能通过键值对来操作。
再说说你写的这一段代码吧, 实际工作中千万不要这么直接取数据(dic.values()),这样很占内存的,如果你的字典存的数据很大打过你的内存,你这句代码一执行,直接废了。 记住无论你想取key,还是value 直接循环字典就行,不要循环字典的key或者value

linux超 | 园豆:289 (菜鸟二级) | 2019-01-23 14:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册