Python fromkeys方法的意外结果
我是Python新手,正在学习它的基础知识 我遇到了这段代码: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':
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(在对问题的初步评论之后):
我的理解如下:
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',…]
,那么您就可以得到您所期望的。您是否需要(或应该依赖)插入顺序是另一个问题。@好吧,集合不保留插入顺序;只有口授才能做到。