python - отсортировать список кортежей в словаре словарей - PullRequest
0 голосов
/ 09 мая 2018

У меня есть словарь словарей, который выглядит примерно так:

{'AAA': {'A1': [(0, ('a', 'b')), (3, ('c', 'd')), (2, ('a', 'b'))],
         'B1': [(3, ('a', 'b')), (2, ('a', 'b')), (1, ('c', 'd'))]},
 'BBB': {'A1': [(4, ('a', 'b')), (2, ('c', 'd')), (1, ('a', 'b'))],
         'B1': [(3, ('c', 'd')), (2, ('a', 'b')), (1, ('a', 'b'))]}}

Я хочу упорядочить по первому элементу в списке кортежей кортежей.

Желаемый результат:

{'AAA': {'A1': [(0, ('a', 'b')), (2, ('a', 'b')), (3, ('c', 'd'))],
         'B1': [(1, ('c', 'd')), (2, ('a', 'b')), (3, ('a', 'b'))]},
 'BBB': {'A1': [(1, ('a', 'b')), (2, ('c', 'd')), (4, ('a', 'b'))],
         'B1': [(1, ('a', 'b')), (2, ('a', 'b')), (3, ('c', 'd'))]}}

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Вы можете отсортировать списки на месте, используя метод list.sort

d = {'AAA': {'A1': [(0, ('a', 'b')), (3, ('c', 'd')), (2, ('a', 'b'))],
             'B1': [(3, ('a', 'b')), (2, ('a', 'b')), (1, ('c', 'd'))]},
     'BBB': {'A1': [(4, ('a', 'b')), (2, ('c', 'd')), (1, ('a', 'b'))],
             'B1': [(3, ('c', 'd')), (2, ('a', 'b')), (1, ('a', 'b'))]}}

for subd in d.values():
    for l in subd.values():
        l.sort()

from pprint import pprint
pprint(d)

{'AAA': {'A1': [(0, ('a', 'b')), (2, ('a', 'b')), (3, ('c', 'd'))],
         'B1': [(1, ('c', 'd')), (2, ('a', 'b')), (3, ('a', 'b'))]},
 'BBB': {'A1': [(1, ('a', 'b')), (2, ('c', 'd')), (4, ('a', 'b'))],
         'B1': [(1, ('a', 'b')), (2, ('a', 'b')), (3, ('c', 'd'))]}}
0 голосов
/ 09 мая 2018

Вы можете использовать вложенное словарное понимание:

d = {'AAA': {'A1': [(0, ('a', 'b')), (2, ('a', 'b')), (3, ('c', 'd'))],
             'B1': [(1, ('c', 'd')), (2, ('a', 'b')), (3, ('c', 'd'))]},
     'BBB': {'A1': [(1, ('a', 'b')), (2, ('c', 'd')), (4, ('a', 'b'))],
             'B1': [(1, ('a', 'b')), (2, ('a', 'b')), (3, ('c', 'd'))]}}
new_d = {a:{c:sorted(d, key=lambda x:x[0]) for c, d in b.items()} for a, b in d.items()}

Вывод:

{'AAA': {'A1': [(0, ('a', 'b')), (2, ('a', 'b')), (3, ('c', 'd'))],
         'B1': [(1, ('c', 'd')), (2, ('a', 'b')), (3, ('c', 'd'))]},
 'BBB': {'A1': [(1, ('a', 'b')), (2, ('c', 'd')), (4, ('a', 'b'))],
         'B1': [(1, ('a', 'b')), (2, ('a', 'b')), (3, ('c', 'd'))]}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...