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

将整数作为键的Python字典会自然排序吗?

沈凡
2023-03-14
问题内容

如果我创建一个使用整数作为键的Python字典,是否可以安全地假设对dict进行迭代将根据键值按顺序检索项目?

即会

my_dict = {}
for x in range(0,100):
  my_dict[x] = str(x)

for item in my_dict.items():
  print item

总是导致按键值顺序打印列表?


问题答案:

简而言之,没有。我敢打赌,您注意到字典将键的哈希用作数组的索引,并且由于int哈希到它们自己的值,因此您推断出,如果插入的值的键是整数,则插入的值将按键顺序结束。尽管该语句的前两个部分是正确的,但即使是未记录的副作用,该推论也不是正确的。dict键是从键的散列
派生
的,但不是完整的散列。这意味着即使使用整数键,由于2个值可能在同一位置发生冲突(甚至具有“乱序”的哈希值),因此最终仍然会乱序插入,最终导致乱序地将键插入字典

基本上,可以将其视为dict的内部存储数组中的索引,该索引是键哈希值中一定数量的低阶位。仅仅因为一个数字大于另一个数字并不意味着从其截断的低阶位构建的值将更大甚至不同。



 类似资料:
  • 问题内容: 假设我有大量不同颜色的水果,例如24个蓝色香蕉,12个绿色苹果,0个蓝色草莓等等。我想将它们组织成Python的数据结构,以便于选择和排序。我的想法是将它们放入以元组为键的字典中,例如, 甚至字典,例如 例如,我想检索所有蓝色水果或所有颜色的香蕉的列表,或按水果名称对字典进行排序。有没有办法做到这一点? 用元组作为键的字典可能不是处理这种情况的 正确 方法。 欢迎所有建议! 问题答案:

  • 问题内容: 所以我有一个字典,打印时看起来像这样: 我想以我定义的自定义方式对它们进行排序。假设我希望按键排序的方式是。 有人知道如何以预定义/自定义的方式整理字典吗?我正在做的是从数据库中获取此词典,它可以带有20多个键,所有键都有特定的顺序。总是设置顺序,但有时某些键/值不会出现在字典中。所以这也可能发生: (按键排序)为。 因此,在此示例中不存在10,但是我需要的排序仍然相同,仅缺少10。

  • 问题内容: 我有一些文件需要按名称排序,但是不幸的是,我无法使用常规排序,因为我也想对字符串中的数字进行排序,因此我进行了一些研究,发现所寻找的东西叫做。 我尝试了此处给出的解决方案,并且效果很好。 但是,对于诸如和这样的字符串,该字符串会导致特定的自然键算法失败,因为它仅与第一个整数匹配,在这种情况下,该整数将是和,因此它放弃了排序。因此,我认为可能会帮助匹配字符串中的所有数字并将它们分组在一起

  • 问题内容: 我想使用字典在python中调用一个函数。 这是一些代码: 这可以打印,但我希望只打印test。 我希望它可以类似地工作以获取更多参数: 这可能吗? 问题答案: 最后自己解决了。很简单,我只是缺少运算符来解开字典 因此,我的示例变为:

  • 问题内容: 这将是一个很好的方式,从去到 我检查了一些帖子,但它们都使用了返回元组的”sorted” 运算符。 问题答案: 标准Python字典是无序的。即使你对(key,value)对进行了排序,也无法以保留顺序的方式存储它们。 最简单的方法是使用OrderedDict,它可以记住元素插入的顺序: 没关系od打印方式;它会按预期工作: Python 3 对于Python 3用户,需要使用.ite

  • 问题内容: 我想在Swift中对字典进行排序。我有一本字典,例如: 等,我希望它像 等等 我在SO上尝试了许多解决方案,但没有人为我工作。我正在使用XCode6 Beta 5,在它上面有一些正在给编译器错误,在一些解决方案中有例外。因此,任何可以发布字典排序工作副本的人。 问题答案: 编辑: 上面代码中的排序数组仅包含键,而值必须从原始字典中检索。但是,也是(键,值)对的一对,我们可以使用全局函数