【问题标题】:when running for loop on dictionary in Python2在 Python2 中的字典上运行 for 循环时
【发布时间】:2019-08-04 17:33:05
【问题描述】:

我对将 C++ 作为我的第一语言的 python 很陌生。 假设我有一本字典如下:

 price = {
 'banana' : 3,
 'apple' : 2,
 'strawberry' : 6
 }

当我按如下方式运行 for 循环时:

 for i in price:
   print i

我的输出是这样的:

 strawberry, banana, apple

我认为 for 循环按顺序迭代数组或列表。这不适用于字典吗?我预计结果是“香蕉,苹果,草莓”,因为香蕉是我字典中的第一个键,草莓是最后一个键。

我不明白的python2发生了什么?

【问题讨论】:

  • 如果您是 Python 新手,请忘记 Python 2,从 3 开始。Python 3 于 2008 推出,2 的最终支持结束日期为 2020 年 1 月 1 日-- 距离现在不到十个月。

标签: python python-2.7 dictionary for-loop iteration


【解决方案1】:

在 Python 2.7 中,迭代字典并不能保证键或值的返回顺序。

如果需要,可以使用OrderedDict

在 Python 3.7 中,订单显然是 guaranteed,但老实说,我会使用 OrderedDict 只是为了确保为了可读性而明确说明它,如果你需要的话。

【讨论】:

  • 在 Python 3.7 中,顺序是有保证的,而在 3.6 中,它是一个实现细节。这个问题被标记为 2.7,所以这篇文章在这种情况下并不正确,但很多人似乎认为这适用于 所有 CPython 字典,现在已经改变了。
  • 谢谢老兄,更新了我的答案并学到了一些新东西。太棒了:)
【解决方案2】:

字典不记得插入元素的顺序。这就是为什么当你迭代它时,顺序是任意的。另一方面,OrderedDict 会跟踪所述顺序。语法与使用常规字典相同,您需要导入 collections 模块。你的情况

from collections import OrderedDict

price = OrderedDict()

price['banana'] = 3
price['apple'] = 2
price['strawberry'] = 6

for i in price:
   print(i)

应该会给你想要的结果。

请注意,即使您可以创建一个常规字典并将其作为参数传递给OrderedDict() 构造函数,也不能保证顺序。

【讨论】:

  • 这与近半小时前的建议没有什么不同,并提出了已在该答案中澄清的一揽子声明
猜你喜欢
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
  • 2015-02-27
  • 2016-02-21
  • 2012-06-16
相关资源
最近更新 更多