Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解python字典的顺序_Python_Python 3.x_Loops_For Loop - Fatal编程技术网

理解python字典的顺序

理解python字典的顺序,python,python-3.x,loops,for-loop,Python,Python 3.x,Loops,For Loop,有人能解释一下python(v3.5)词典是如何订购的吗 data = {"John": 23, "Rick": 33, "Mary": 63, "Ron": 23, "Joel": 51} for key in data: print("Your name is " + key + ", and you are also " + str(

有人能解释一下python(v3.5)词典是如何订购的吗

data = {"John": 23, "Rick": 33, "Mary": 63, "Ron": 23, "Joel": 51}

for key in data:
        print("Your name is " + key + ", and you are also " + str(data[key]) + " years old.")
实际产量:

Your name is Rick, and you are also 33 years old.
Your name is Ron, and you are also 23 years old.
Your name is Mary, and you are also 63 years old.
Your name is John, and you are also 23 years old.
Your name is Joel, and you are also 51 years old.
预期输出(字典的顺序):


这取决于您使用的Python版本

在Python 3.6之前 字典使用底层哈希函数的顺序。有几种类型都有salt散列,因此这意味着您在每次调用时获得不同的顺序

Python 3.6+ 词典是按插入顺序排列的,即词典记住插入项的顺序。发件人:

这个新实现的顺序保持方面被认为是一个实现细节,不应该依赖它

Python 3.7
Guido van Rossum宣布,从年的Python 3.7版本开始,

与列表中不同,字典中存储的项目没有任何特定的顺序;事实上,Python将其从左到右的顺序随机化,以提供快速查找。键提供字典中项目的符号位置(非物理位置)。
如果在列表中认为是对象的有序集合,则可以将字典视为无序集合。项目是通过键存储和获取的,而不是通过位置偏移:)

您使用的是什么版本的Python?我从中学习,所以我假设是最新版本。那么v3.7呢?我把帖子标记为3.x.@Mech,我添加了一个答案,希望能快速解决你的问题。不完全!你可以在他们的官方文档中查找每个新版本的更新。到目前为止,当前的稳定版本是3.8,很难找到一个好的教程。我没有足够的信心发布我自己的答案,但当前的答案缺少的是,在较旧的Python版本中(在他们更改某些内容以保留插入顺序之前),存储在其中的项基于键创建哈希表,并根据该标准订购物品。这样做是为了加快搜索速度:如果用户访问一个特定的密钥,则计算散列并进行二进制搜索。正如您所理解的,散列值顺序可以不同于插入顺序或键字母顺序。我就是这样理解的。
Your name is John, and you are also 23 years old.
Your name is Rick, and you are also 33 years old.
Your name is Mary, and you are also 63 years old.
Your name is Ron, and you are also 23 years old.
Your name is Joel, and you are also 51 years old.