Python fromkeys方法的意外结果

Python fromkeys方法的意外结果,python,Python,我是Python新手,正在学习它的基础知识 我遇到了这段代码: keys = {'a', 'e', 'i', 'o', 'u' } vowels = dict.fromkeys(keys) print(vowels) 我的预期是,输出将如下所示: {'a': None, 'e': None, 'i': None, 'o': None, 'u': None} 但当我在pyCharm中执行这段代码时,我得到了以下结果: {'u': None, 'o': None, 'e': None, 'a':

我是Python新手,正在学习它的基础知识

我遇到了这段代码:

keys = {'a', 'e', 'i', 'o', 'u' }
vowels = dict.fromkeys(keys)
print(vowels)
我的预期是,输出将如下所示:

{'a': None, 'e': None, 'i': None, 'o': None, 'u': None}
但当我在pyCharm中执行这段代码时,我得到了以下结果:

{'u': None, 'o': None, 'e': None, 'a': None, 'i': None}
请帮助我了解这里发生了什么。这背后有什么逻辑吗

编辑1(在对问题的初步评论之后):

我的理解如下:

  • 创建字典“键”时,内存块将按照键序列分配,并带有下一个成员块的地址(如链表)

  • 当'fromkeys'方法被执行时,它将遵循相同的模式并获得一个克隆


  • set
    在Python中不是一个有序的iterable对象。所以当你们迭代时,你们会得到随机项

    但是,当将关键帧作为
    列表
    元组
    对象时,您可以得到您想要的:

    keys = ['a', 'e', 'i', 'o', 'u']
    vowels = dict.fromkeys(keys)
    print(vowels)
    #{'a': None, 'e': None, 'i': None, 'o': None, 'u': None}
    

    哈希表(字典)没有意义或顺序。如果您再次运行这段代码,您将得到不同的结果
    keys
    是一个集合,集合没有保证的顺序。我们不应该期望字典(map)的key->value有任何顺序。在python的最新版本中,您可以依赖插入顺序。因此,如果您将
    keys={'a',…}
    转换为
    keys=['a',…]
    ,那么您就可以得到您所期望的。您是否需要(或应该依赖)插入顺序是另一个问题。@好吧,集合不保留插入顺序;只有口授才能做到。