我试图通过排序特定的嵌套字典来解决这个问题。
结构如下:
dct = {
"test": {
0: [1, 3],
1: [5, 6],
},
"test2": {
7: [9],
3: [4, 6],
}
}
我希望能够通过“测试”术语和密钥进行排序,因此在“test2”中我会有前3个然后是7个。
我试过这个
arr = OrderedDict(sorted(dct.items(), key=lambda x: (x[0], x[1])))
但这似乎不起作用。有没有办法进行这种排序?
答案 0 :(得分:2)
所以基本上因为sorted
中的nested dict
需要>>> new_d = OrderedDict()
>>> for key,val in d.items(): #go through the dictionary
new_d[key] = OrderedDict(sorted(val.items())) #sort according to keys
,所以请浏览字典并将数据传输到新词典。
IN : d
{
'test' :{ 0:[1,3] ,
1:[5,6]
},
'test2':{ 7:[9],
3:[4,6]
}
}
OUT : new_d
OrderedDict([('test', {0: [1, 3], 1: [5, 6]}), ('test2', {3: [4, 6], 7: [9]})])
#driver values
test3:{ ... } , test2:{ ... }
修改:由于OP希望字典的初始密钥(EX:>>> initial_sort = OrderedDict(sorted(d.items()))
>>> inital_sort
OrderedDict([('test2', {7: [9], 3: [4, 6]}), ('test3', {0: [1, 3], 1: [5, 6]})])
>>> new_d = OrderedDict()
>>> for key,val in initial_sort.items(): #go through the first key sorted dictionary
new_d[key] = OrderedDict(sorted(val.items()))
)也要排序,因此以下更改需要完成:
IN : d = {'test3': {0: [1, 3], 1: [5, 6]}, 'test2': {7: [9], 3: [4, 6]}}
OUT : new_d = OrderedDict([('test2', OrderedDict([(3, [4, 6]), (7, [9])])), ('test3', OrderedDict([(0, [1, 3]), (1, [5, 6])]))])
#driver values
{{1}}
答案 1 :(得分:1)
如果你想要外部字典和所有内部字符串排序,那么你需要 OrderedDict 的 OrderedDict 。您可以使用
之类的东西创建它OrderedDict(sorted((k, OrderedDict(sorted(v.items()))) for k,v in dct.items()))