Classificando um OrderedDict aninhado por chave, recursivamente

Dizerorig é umOrderedDict que contém string normal: pares de valores de chave de string, mas às vezes o valor pode ser outro, aninhadoOrderedDict.

Eu quero classificarorig por chave, alfabeticamente (ascendente), e faça-orecursivamente.

Regras:

Suponha que as seqüências de teclas sejam imprevisíveisSuponha que o aninhamento possa ocorrer infinitamente, por exemplo todos os níveis 1 a 50 têm as duas strings, OrderedDicts, etc. como valores.

Precisa de uma assistência com osorted algoritmo:

import string
from random import choice


orig = OrderedDict((
    ('a', choice(string.digits)),
    ('b', choice(string.digits)),
    ('c', choice(string.digits)),
    ('special', OrderedDict((
        ('a', choice(string.digits)),
        ('b', choice(string.digits)),
        ('c', choice(string.digits)),
    )))
))

sorted_copy = OrderedDict(sorted(orig.iteritems(), ...))

self.assertEqual(orig, sorted_copy)

questionAnswers(3)

yourAnswerToTheQuestion