按键对嵌套的OrderedDict进行递归排序 [英] Sorting a nested OrderedDict by key, recursively

查看:176
本文介绍了按键对嵌套的OrderedDict进行递归排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

orig是一个OrderedDict,其中包含普通的string:string键值对,但有时该值可能是另一个嵌套的OrderedDict.

Say orig is an OrderedDict which contains normal string:string key value pairs, but sometimes the value could be another, nested OrderedDict.

我想按字母顺序(升序)按键对orig进行排序,然后递归地进行.

I want to sort orig by key, alphabetically (ascending), and do it recursively.

规则:

  • 假设键字符串是不可预测的
  • 假设嵌套可以无限进行,例如1-50级都具有字符串,OrderedDicts等作为值.

需要有关sorted算法的帮助:

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)

推荐答案

对于python 3.6 +,@ pelson的答案更好

for python 3.6+, @pelson's answer is better

类似:

def sortOD(od):
    res = OrderedDict()
    for k, v in sorted(od.items()):
        if isinstance(v, dict):
            res[k] = sortOD(v)
        else:
            res[k] = v
    return res

这篇关于按键对嵌套的OrderedDict进行递归排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆