当前位置: 首页 > 面试题库 >

为什么字典中的项目顺序在Python中发生了变化?

爱繁
2023-03-14
问题内容

我正在尝试从一些教程中学习Python。这是我遇到的一个简单例子,使我感到困惑。

>>> d={"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}

>>> d
{'pwd': 'secret', 'database': 'master', 'uid': 'sa', 'server': 'mpilgrim'}

>>> d.keys()
['pwd', 'database', 'uid', 'server']

>>> d.values()
['secret', 'master', 'sa', 'mpilgrim']

正如您在定义字典的第一行中所看到的,该项是字典"pwd":"secret"中的最后一个元素。但是,当我输出字典时,它成为第一个元素。字典的其余部分已重新排序。

我可以知道为什么会这样吗?

如果我使用dict.keys()从字典中提取密钥并按照我认为的顺序对其进行迭代,那会导致不匹配问题吗?


问题答案:

我可以知道为什么会这样吗?

这是因为命令是在内部组织的。

简而言之,这通过哈希表起作用,该哈希表根据密钥的hash()值将密钥放入存储桶中。

如果我使用dict.keys()从字典中提取密钥并按照我认为的顺序对其进行迭代,那会导致不匹配问题吗?

取决于您的操作方式。

k = list(d.keys())
k.sort()
for i in k: print i, d[i]

应该可以正常工作。



 类似资料:
  • 问题内容: 码: 打印。我不确定该方法如何确定l中关键字的顺序。但是,我希望能够以“适当”的顺序检索关键字。当然,正确的顺序将创建列表。 和这个: 问题答案: 你可以使用OrderedDict(需要Python 2.7)或更高版本。 另外,请注意,由于dict你使用进行创建的操作已经忘记了元素的顺序,因此该操作无效。相反,你想使用。 如文档中所述,对于低于python 2.7的版本,你可以使用此配

  • 问题内容: 我正在寻找一个有序的关联数组,即有序的字典的可靠实现。我想要按键而不是插入顺序排序。 更准确地说,我正在寻找一种int-to-float(或另一种用例是string-to-float)映射结构的节省空间的实现,该结构的结构是: 有序迭代为O(n) 随机访问为O(1) 我想到的最好的方法是将字典和键列表粘合在一起,使最后一个键按等分和插入顺序排列。 还有更好的主意吗? 问题答案: “随机

  • 问题内容: 我不明白在python中如何通过“任意”顺序循环遍历字典或集合。 我的意思是,这是一种编程语言,所以语言中的一切都必须100%确定,对吗?Python必须有某种算法来决定选择字典或集合的哪个部分,1,2等等。 我错过了什么? 问题答案: 顺序不是任意的,而是取决于字典或集合的插入和删除历史,以及特定的Python实现。对于这个答案的其余部分,对于,你还可以读取;被实现为只有键而没有值的

  • 问题内容: 这是我的Django代码,无法正常运行: 有没有办法保持原始元素的顺序,所以帖子将按in排序? 谢谢! 编辑: Python 2.6,Django 1.3 问题答案: 使用SortedDict代替dict() SortedDict保持其属性中的顺序。因此,您可以根据需要操纵顺序而无需重建字典。例如,要反转SortedDict的顺序,只需使用

  • 问题内容: D = {‘a’: 1, ‘b’: 2, ‘c’: 3} >>> D 我只是在Python shell中进行了此操作,我想知道为什么键“ c”会在键“ b”之后??? 问题答案: 顺序与它们内部的工作方式以及它们在哈希表中的顺序有关。这又取决于键的哈希值,键的插入顺序以及所使用的Python实现。 该顺序是任意的(但不是随机的),知道它将是哪个顺序将永远不会有用。 要获取排序的键列表,

  • 问题内容: 在python中,我编写了此函数来告诉自己如何在python中工作: 然后我用 这是我的Python解释器打印的输出: 为什么即使我先将a2输入到函数中,for循环也还是在a2之前打印a3值? 问题答案: 是一本字典。字典是无序的- 简而言之,未指定顺序和实现细节。深入了解之下,该顺序将根据项目的哈希值,插入顺序等而发生巨大变化,因此最好不要依赖与之相关的任何内容。