Сортировать сложный словарь Python? - PullRequest
0 голосов
/ 24 августа 2018

Извините, если этот вопрос уже задавался ранее, я прочитал некоторые темы, но это мне пока не помогло.

Я получаю этот ответ JSON от программного API:

 {
    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> fields> name).Я пытаюсь сделать это с сортировкой, но я не нашел правильный синтаксис: (

Кто-нибудь может мне помочь, пожалуйста?

Спасибо большое!

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Если d ваш голос, то

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

сделает это на месте.

0 голосов
/ 24 августа 2018

Я бы сначала преобразовал словарь в список из двух кортежей, а затем отсортировал список по соответствующему полю.Это может быть так просто, как (при условии, что глобальный dict называется j):

sorted([(k,v) for k,v in j['objects'].items()], key=(lambda x: x[1]['fields']['name']))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...