一尘不染

为什么使用setdefault()乱序创建此python字典?

python

我刚刚开始使用Python(VBA背景)。为什么此字典创建混乱?不应该是a:1,b:2 …等吗?

class Card:
def county(self):
    c = 0
    l = 0
    groupL = {}  # groupL for Loop
    for n in range(0,13):
        c += 1
        l = chr(n+97)
        groupL.setdefault(l,c)
    return groupL

pick_card = Card()
group = pick_card.county()
print group

这是输出:

{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 'k': 11, 'j': 10, 'm': 13, 'l': 12}

还是只是打印出乱序?


阅读 156

收藏
2020-12-20

共1个答案

一尘不染

字典在python中没有顺序。换句话说,当您遍历字典时,键/项目“屈服”的顺序不是您将其放入字典的顺序。(在其他版本的python上尝试您的代码,您可能会获得不同顺序的输出)。如果您要订购的字典,则需要一个collections.OrderedDict直到python
2.7才引入的字典。ActiveState如果您使用的是旧版本的python
,则可以找到等效的食谱。但是,通常只需对项目进行排序就足够了(例如sorted(mydict.items())

*根据要求 *编辑 ,一个OrderedDict示例:

from collections import OrderedDict
groupL = OrderedDict()  # groupL for Loop
c = 0
for n in range(0,13):
    c += 1
    l = chr(n+97)
    groupL.setdefault(l,c)

print (groupL)
2020-12-20