for循环是否在Python 2.x中以有序方式通过字典?

问题描述 投票:0回答:1

我需要使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循环按照密钥创建的顺序遍历字典(基于'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 

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

dictionary for-loop python-2.x
1个回答
0
投票

字典在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/

© www.soinside.com 2019 - 2024. All rights reserved.