как отсортировать список dict по dict [ключ] [ключ] в одну строку (Python3) - PullRequest
0 голосов
/ 27 апреля 2018

Я хочу отсортировать по uid

rsp=[
       {'user': {'uid': 1, 'name': 'Bob'}},
       {'user': {'uid': 5, 'name': 'Sid'}},
       {'user': {'uid': 2, 'name': 'Cas'}},
    ]

до

rsp=[
       {'user': {'uid': 1, 'name': 'Bob'}},
       {'user': {'uid': 2, 'name': 'Cas'}},
       {'user': {'uid': 5, 'name': 'Sid'}},
    ]

Я пытался таким образом ..... но это не работает

result = sorted(rsp, key=itemgetter('user').itemgetter('uid'))

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Вы можете использовать это в качестве ключа для сортировки списка словарей:

rsp.sort(key = lambda x: x['user']['uid'])

>>> rsp
[{'user': {'uid': 1, 'name': 'Bob'}}, {'user': {'uid': 2, 'name': 'Cas'}}, {'user': {'uid': 5, 'name': 'Sid'}}]
0 голосов
/ 27 апреля 2018

Вы можете передать лямбда-функцию в аргумент key:

result = sorted(rsp, key=lambda x: x.get('user', {}).get('uid', -1) )

В этом случае я использую get, чтобы гарантировать, что сортировка не завершится неудачей, если один из элементов не имеет ключа user, и будут размещены любые под-словари, которые не имеют ключа uid. первый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...