Why does this python dictionary get created out of order using setdefault()?
Question: I'm just starting to play around with Python (VBA background). Why does this
dictionary get created out of order? Shouldn't it be a:1, b:2...etc.?

    
    
    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
    

here's the output:

    
    
    {'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}
    

or, does it just get printed out of order?


Answer: Dictionaries have no order in python. In other words, when you iterate over a
dictionary, the order that the keys/items are "yielded" is not the order that
you put them into the dictionary. (Try your code on a different version of
python and you're likely to get differently ordered output). If you want a
dictionary that is ordered, you need a `collections.OrderedDict` which wasn't
introduced until python 2.7. You can find equivalent recipes on `ActiveState`
if you're using an older version of python. However, often it's good enough to
just sort the items (e.g. `sorted(mydict.items())`.

**EDIT** as requested, an OrderedDict example:

    
    
    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)
    

