7

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}

または、それは単に順序が狂って印刷されますか?

4

1 に答える 1

17

Pythonでは辞書に順序はありません。つまり、辞書を反復処理する場合、キー/アイテムが「生成」される順序は、それらを辞書に入れる順序ではありません。(別のバージョンのPythonでコードを試してみると、異なる順序の出力が得られる可能性があります)。順序付けられた辞書が必要な場合は、collections.OrderedDictPython2.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)
于 2012-08-02T19:59:39.970 に答える