代码之家  ›  专栏  ›  技术社区  ›  Teifion

为什么python会这样排序我的字典?[副本]

  •  43
  • Teifion  · 技术社区  · 17 年前

    这是我的字典

    propertyList = {
        "id":           "int",
        "name":         "char(40)",
    
        "team":         "int",
        "realOwner":    "int",
    
        "x":            "int",
        "y":            "int",
    
        "description":  "char(255)",
    
        "port":         "bool",
        "secret":       "bool",
        "dead":         "bool",
        "nomadic":      "bool",
    
        "population":   "int",
        "slaves":       "int",
    }
    

    但是当我用“\n”.coin(myDict)打印出来时,我得到了这个

    name
    nomadic
    dead
    port
    realOwner
    secret
    slaves
    team
    y
    x
    population
    id
    description
    

    我知道字典是无序的,但每次出来的都是一样的,我不知道为什么。

    3 回复  |  直到 17 年前
        1
  •  80
  •   SuperAce99    12 年前

    对于旧版本的Python,真正的问题应该是为什么不呢?无序字典通常实现为 hash table 其中元素的顺序是明确的,但不是立即明显的( the Python documentation used to state this ).你的观察结果完全符合哈希表的规则:显然是任意的,但顺序是恒定的。

    Python已经改变了它的 dict 实施以保持插入顺序,以及 this is guaranteed as of Python 3.7 因此,该实现不再构成纯哈希表(但哈希表仍然是 习惯于 在实施过程中)。

        2
  •  10
  •   GarlicFries    11 年前

    这个 specification 对于内置字典类型 不保留任何秩序,最好把词典看作是一组无序的 key: value 对。..

    您可能想检查 OrderedDict module ,这是具有键插入顺序的有序字典的实现。

        3
  •  8
  •   Miles    17 年前

    关于字典排序,你唯一可以依靠的是,如果不对字典进行修改,顺序将保持不变;例如,在不修改字典的情况下迭代字典两次将导致相同的键序列。然而,尽管Python字典的顺序是确定的,但它可能会受到插入和删除顺序等因素的影响,因此相同的字典最终可能会有不同的顺序:

    >>> {1: 0, 2: 0}, {2: 0, 1: 0}
    ({1: 0, 2: 0}, {1: 0, 2: 0})
    >>> {1: 0, 9: 0}, {9: 0, 1: 0}
    ({1: 0, 9: 0}, {9: 0, 1: 0})