【发布时间】:2014-05-08 10:21:01
【问题描述】:
假设orig 是一个OrderedDict,其中包含普通的字符串:字符串键值对,但有时该值可能是另一个嵌套的OrderedDict。
我想按字母顺序(升序)按键对orig 进行排序,然后递归地进行。
规则:
- 假设键字符串是不可预测的
- 假设嵌套可以无限进行,例如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)
【问题讨论】:
-
只有一层深度吗?或者
special对应的OrderedDict里面可以有另一个OrderedDict? -
@SukritKalra 我在问题中添加了一个
Rules部分,希望能找到一个无需专门了解 OrderedDict 结构即可重新利用的解决方案。 -
@StevenRumbalski 需要它来安全地创建包含许多不同嵌套数据类型的字典的校验和。 dict key order 之类的小东西正在改变校验和,即使 dict 的内容在技术上没有改变。在使用
hashlib.md5(str(my_dict).hexdigest()快速计算字典的散列之前对这些键进行排序让我可以安全地比较未来的版本。 (真正的原因是 MongoDB 不保证每个对象的顺序:docs.mongodb.org/manual/core/document/#document-limitations)。 TLDR:...长篇大论
标签: python sorting recursion ordereddictionary