对嵌套字典python进行排序

时间:2017-10-18 14:20:53

标签: python sorting

我试图通过排序特定的嵌套字典来解决这个问题。

结构如下:

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])))

但这似乎不起作用。有没有办法进行这种排序?

2 个答案:

答案 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()))