python字典元素是否有序_对于Python字典视图.values(),.keys().items()是否有序的解答。...

Coldwings Coldwings ​ Python 话题的优秀回答者 如果按照语言规范来看,Python的规范里没有说明Dict是一个有序的类型。换句话说,dict就是无序的,因为语言规范不保证它按照什么顺序出来。要有序,请使用OrderedDict。 但是无序不是说每次输出结果都不同,无序只是指结果不保证一定与插入顺序一致而已。 CPython 3.6里对dict有个新的实现,使得字典内部存储的顺序不仅仅与key有关,还与插入顺序有关。

但是有关并不代表它就一定按照插入顺序依次出现(似乎当字典实现在内存中进行扩展的时候就可能造成结果不一致),

只不过表示如果key相同,插入顺序相同,那么结果也是相同的。

在此之前,用values和keys方法取到的list仅与key(准确的说是key的__hash__)有关而与插入顺序无关。

字典是无序的,这句话是对的。但是字典的存储过程却是按顺序的。字典的存储背后的逻辑是散列表,也就是稀疏数组。

-> dict初始化之后,Python解释器会给dict分配一定的空间,往字典里添加是按顺序添加的。

-> 但是,如果如果继续往字典里添加新键,有可能会引起Python解释器对存储空间的扩容,扩容的过程会新建散列表,

-> 然后复制已有的元素到新散列表,这个过程可能会引起散列冲突,导致dict的键值对的次序发生变化。

-> 《流畅的Python》一书有关于字典的存储更为详细的介绍。如果不了解散列表,可以查资料。

作者:陈子坤

链接:https://www.zhihu.com/question/65855807/answer/261889672

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

指导链接:https://www.zhihu.com/question/65855807

以上两个答案我觉的应该解释的比较正确。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值