• python有序字典OrderedDict()


    python创建有序字典OrderedDict

    # -*- coding:utf-8 -*-
    """
      python有序字典
      需导入模块collections
    """
    import collections
    # 通过OrderedDict类创建的字典是有序的
    dic = collections.OrderedDict()
    dic['k1'] = 'v1'
    dic['k2'] = 'v2'
    dic['k3'] = 'v3'
    print dic
     
    """
        类似通过列表的方式来实现字典有序
        创建列表,添加列表元素k1时,再将k1作为字典的键,
        因为列表是序的,所以遍历列表就可有序的遍历出字典所有的key
    """
    dic = {'K1': 'V1', 'K2': 'V2', 'K3': 'V3'}
    li = ['k1', 'k2', 'k3']

    参考:

    python模块简介之有序字典(OrderedDict)

    python字典为什么是无序的?

    1 Python的Hash实现是基于Open Addressing的。当你搜索所有的key的时候,实际上就是遍历整个表,寻找那些value不为null的entry,然后把它们的key放到一个list里面,这个 过程自然是不保证顺序的。

    那本书都写了啥...(以下用Hash 简称 Hash Table)
    Hash的思想很简单, 就是跟 index sorting 一个内核, 申请一个Array, 并将Array的位置作为一种元数据
    在 index 排序的时候, 很朴素的, 数值的大小就是 放入array的位置,
    举个例子 我有int A[6], 我要排序 2 5 4 8
    将这些数分别放入Array的2 5 4 8位, 然后按顺序读出, 数列就以O(n)的速度排列完了

    Hash 和 Index 不同的是,
    数值到Array位置的映射是不一样的, 在Index sorting中, 数值在Array的位置就是数值本身
    在Hash中, 是变化的算法, 用Key算出在Array的位置, 放入Value
    比如我的Key是10, 在Hash中, 可能会把Value放到Array位置2上

    在这种算法下, 插入顺序是不可估计的.
    第一次操作, Key 2 Value 90 插入到 Hash Table A, 算出来位置是 5
    第二次操作, Key 9 Value 10 插入到 Hash Table A, 算出来位置是 3
    你发现了没有, Hash Table根本不保证插入的顺序
    后来的数据是可以跑到先插入的数据前面去的.

    Hash的本质是, 将一数列作为Key尽量平均分配另一个数列Value到程序已经申请好的Array上.

    最后说点无关的, 也会导致字典乱序的原因.
    Python会自动扩容字典.
     
    作者:林诚
    链接:https://www.zhihu.com/question/24306558/answer/27358613
    来源:知乎
  • 相关阅读:
    Vagrant命令
    您必须知道的 Git 分支开发规范
    phpstorm的提速设置
    Flex 布局教程:语法篇
    Bootstrap 3 & 4 的多级下拉菜单示例
    申请快递查询100接口
    vue.js组件与组件之间的通信
    MAMP环境下 cookie无法正常使用
    Git 常用命令
    Linux学习笔记之yum安装mysql5.7
  • 原文地址:https://www.cnblogs.com/yiyezhouming/p/7756118.html
Copyright © 2020-2023  润新知