对复杂的python字典进行排序?

时间:2018-08-24 08:44:24

标签: python sorting dictionary

很抱歉,以前是否已经问过这个问题,我读了一些主题,但到目前为止对我没有帮助。

我从软件API获得此JSON响应:

 {
    u 'code': 0, u 'message': u 'Found: 367', u 'objects': {
        u 'ApplicationSolution::15056': {
            u 'fields': {
                u 'id': u '15056',
                u 'name': u 'R'
            },
            u 'message': u '',
            u 'code': 0,
            u 'class': u 'ApplicationSolution',
            u 'key': u '15056'
        },
        u 'ApplicationSolution::15758': {
            u 'fields': {
                u 'id': u '15758',
                u 'name': u 'Z'
            },
            u 'message': u '',
            u 'code': 0,
            u 'class': u 'ApplicationSolution',
            u 'key': u '15758'
        },
        u 'ApplicationSolution::15053': {
            u 'fields': {
                u 'id': u '15053',
                u 'name': u 'E'
            },
            u 'message': u '',
            u 'code': 0,
            u 'class': u 'ApplicationSolution',
            u 'key': u '15053'
        },
        u 'ApplicationSolution::15050': {
            u 'fields': {
                u 'id': u '15050',
                u 'name': u 'C'
            },
            u 'message': u '',
            u 'code': 0,
            u 'class': u 'ApplicationSolution',
            u 'key': u '15050'
        },
}

我想用ApplicationSolution名称(对象> ApplicationSolution:xxxxx>字段>名称)对该响应进行排序。我尝试通过排序来做到这一点,但我没有找到正确的语法:(

有人可以帮助我吗?

非常感谢您!

2 个答案:

答案 0 :(得分:1)

我首先将字典转换为2元组的列表,然后使用适当的字段对列表进行排序。它可以很简单(假设全局字典称为j):

sorted([(k,v) for k,v in j['objects'].items()], key=(lambda x: x[1]['fields']['name']))

答案 1 :(得分:0)

如果d是您的字典,那么

def fieldname((k, v)):
    return v['fields']['name']
d['objects'] = list(sorted(d['objects'].items(), key=fieldname))

将原位进行。