【问题标题】:Why does dict(enumerate(myset)) return a jumbled up dict, unlike dict(enumerate(list))? [duplicate]与 dict(enumerate(list)) 不同,为什么 dict(enumerate(myset)) 返回一个混乱的 dict? [复制]
【发布时间】:2021-03-18 16:36:20
【问题描述】:

我一直在尝试研究最简单的事情,如果有人解释为什么会这样,我将不胜感激。代码如下:sn-p:

#使用枚举从集合中创建字典:

    myset = {'A','A','B','C'}
    mydict = dict(enumerate(myset))
    print(mydict)

输出:

    {0: 'B', 1: 'C', 2: 'A'}

我的预期输出:

    {0: 'A', 1: 'B', 2: 'C'}

然而,它适用于列表!

#使用枚举从列表中创建字典:

    li = ["apple","banana","mango"]
    mydict = dict(enumerate(myset))
    print(mydict)

输出:

    {0: 'apple', 1: 'banana', 2: 'mango'}

感谢解释!

【问题讨论】:

  • 集合中元素的顺序是未指定的,CPython 故意打乱它以防止您依赖于一致的顺序。
  • @Barmar:你在想围棋地图之类的吗?在 CPython 集中没有刻意改组。
  • @user2357112supportsMonica 我想我记得一个问题,有人反复运行这样的代码,每次都得到不同的顺序。
  • @Barmar:您可能正在考虑哈希随机化的影响——一些内置类型的哈希取决于在解释器设置时初始化的随机状态。这是为了让哈希冲突攻击更加困难。

标签: python dictionary set enumerate


【解决方案1】:

集合没有顺序,但列表有。这就是为什么当您枚举集合时它没有按照您的预期顺序进行。更多信息可以在official documentation.找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-12
    • 2016-02-22
    • 2014-01-25
    • 1970-01-01
    • 2020-12-16
    • 2013-08-04
    • 2018-07-05
    • 2014-08-21
    相关资源
    最近更新 更多