如何保留嵌套字典的输入顺序?具体来说:我使用另一个字典使它成为有序字典的嵌套字典(命名为' outdict'),然后我添加新密钥。
示例数据:
example1 = {'x': '28', 'y': 9,'z': '1999'}
example2 = {'x': '12', 'y': 15,'z': '2000'}
test1 = "abc"
test2 = "def"
我想要的' outdict'是
{'one': {'x': '28', 'y': 9,'z': '1999', 'alpha': 'abc'},
'two': {'x': '12', 'y': 15,'z': '2000', 'alpha': 'def'}}
我尝试了两件事:
from collections import OrderedDict
class MyDict(OrderedDict):
def __missing__(self, key):
val = self[key] = MyDict()
return val
outdict = MyDict()
outdict["one"].update(OrderedDict(example1))
outdict["one"]["alpha"] = test1
outdict["two"].update(OrderedDict(example2))
outdict["two"]["alpha"] = test2
(来自https://stackoverflow.com/questions/18809482#18809656) 结果:未排序
outdict = OrderedDict()
outdict["one"] = OrderedDict()
outdict["two"] = OrderedDict()
outdict["one"].update(OrderedDict(example1))
outdict["one"]["alpha"] = test1
outdict["two"].update(OrderedDict(example2))
outdict["two"]["alpha"] = test2
结果:未排序
答案 0 :(得分:1)
你不能只是采用常规字典并将其包装在OrderedDict()中。这不会恢复值的顺序。您需要从头开始使用有序的字典。例如:
原来我们有......
>>> example1 = {'x':'28','y':'9','z':'1999'}
>>> example1
{'y': '9', 'x': '28', 'z': '1999'}
现在使用OrderedDict()
>>> from collections import OrderedDict
>>> example2 = OrderedDict()
>>> example2['x']=28
>>> example2['y']=9
>>> example2['z']=1999
>>> example2
OrderedDict([('x', 28), ('y', 9), ('z', 1999)])
答案 1 :(得分:1)
将常规无序字典的内容放入有序字典中不会神奇地恢复无序字典中值的顺序。
但是你可以做一些事情:
也将example1
设为OrderedDict
,因此其值已排序;但是将这些项目作为一个列表传递,而不是作为一个字典,或者在它们到达之前它们将被再次排序。在有序的字典中
example1 = OrderedDict([('x', '28'), ('y', 9), ('z', '1999')])
如果您希望按字母顺序排序这些值,而不一定按照添加顺序排序,您只需对项目进行排序并从中创建新的OrderedDict
...
example1 = OrderedDict(sorted(example1.items()))
...或跳过该步骤并直接使用已排序的项目更新外部字典
outdict["one"].update(sorted(example1.items()))