【问题标题】:Is a for loop going through a dict in an ordered fashion in Python 2.x?在 Python 2.x 中,for 循环是否以有序的方式遍历字典?
【发布时间】:2020-09-25 23:50:10
【问题描述】:

我需要根据字典中的关键位置创建 if 语句。

理想情况下我会有这样的东西:

for key in dict:

    #setup things based on key value

    if key==first key in dict:
      #do smth order dependent

    elif key==last key in dict:
      #do smth order dependent

    else:
      #do smth order dependent

但由于 Python 2.x 中的字典没有排序,我无法直接按索引位置检索元素。

因此,如果 for 循环按创建键的顺序遍历 dict(根据 'keylist' 填充),我可以这样做:

for key in dict: 

    #setup things based on key value

    if key==keylist[0]: #the list/tuple the dict keys were created from gets referenced here
      #do smth order dependent

    elif key==keylist[-1]:
      #do smth order dependent

    else:
      #do smth order dependent 

如果顺序与键列表的顺序不同,我需要将 for 循环分成两个,所以第一个可以按照循环遍历 dict 的顺序填充一个新列表(作为一种一个计数器),所以第二个可以根据这个真实的顺序做事。

for key in dict:

    #setup things based on key value

    new_keylist.append(key) 

for key in new_keylist:
    if key==new_keylist[0]:
      #do smth order dependent

    elif key==new_keylist[-1]:
      #do smth order dependent

    else:
      #do smth order dependent 

我需要加倍努力吗?感谢您提前澄清。

【问题讨论】:

  • “但由于 Python 2.x 中的字典没有排序,我无法直接按索引位置检索元素”在 Python 3 中也不能这样做

标签: dictionary for-loop python-2.x


【解决方案1】:

字典在 Python 2.x 中是无序的;如果您需要可预测的行为,则应使用单独的有序字典实现。

或许也可以看看Do dicts preserve iteration order if they are not modified?

即使在 3.6+ 中,这也是依赖于实现的;如果您想依赖此行为,请使用 OrderedDict。见https://gandenberger.org/2018/03/10/ordered-dicts-vs-ordereddict/

【讨论】:

  • 感谢您的回复。不幸的是,由于我使用的是 Houdini 附带的 Python,我必须使用它附带的版本和库(不知道如何在上面使用 pip),所以我想我必须解决我的问题设想。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2015-10-30
  • 2023-03-12
  • 2022-09-22
  • 2013-02-20
  • 2011-03-18
相关资源
最近更新 更多