2016-04-15 1 views
0

Как я могу сортировать многослойный словарь, переставляя ключи словаря второго слоя? Я думаю, что примером будет лучший способ представить его.Сортировка многослойного словаря путем сортировки словаря второго уровня

оригинальный многослойный словарь:
{'John': {'Low >3 days': 3,'Low >1 day': 2,'High <1 day': 2,'High >3 days': 3,'Low <1 day': 1,'High >1 day': 1},'Mary': {'High >1 day': 5,'High >3 days': 1,'Low <1 day': 0, 'Low >1 day': 2, 'Low >3 days': 9, 'High <1 day': 5}}

Я пытаюсь устроить вторую словарю слой с изменением первого словаря слоя и переместите пару ключ-значение второго слоя вместе одновременно. Порядок второго словаря слоя ключ High <1 day, Low <1 day, High >1 day, Low >1 day, High >3 days, Low >3 days. Ожидаемый результат будет следующим:
{'John': {'High <1 day': 2,'Low <1 day': 1,'High >1 day': 1,'Low >1 day': 2,'High >3 days': 3,'Low >3 days': 3},'Mary': {'High <1 day': 5,'Low <1 day': 0,'High >1 day': 5,'Low >1 day': 2,'High >3 days': 1,'Low >3 days': 9}}

ответ

0

Я думаю, что у вас есть фундаментальное непонимание того, что такое словарь. Нет смысла сортировать словарные ключи, потому что словарь неупорядочен. Неважно, где/как ключи находятся в словаре. Я думаю, у вас есть два варианта.


Если вы мертвы, установлен на том, ключи быть в определенном порядке, вы можете использовать ordered dict. Это запомнит порядок, в который вы вставили свои ключи в словарь. Если у вас уже есть текущий dict, вы можете преобразовать его в упорядоченный dict, используя следующий код.

from collections import OrderedDict 
exDict = #... put your dict here 
keyOrder = ['High <1 day', 'Low <1 day', 'High >1 day', 'Low >1 day', 'High >3 days', 'Low >3 days'] 
ordDict = OrderedDict() 
for k in exDict.keys(): 
    ordDict[k] = OrderedDict() 
    for kO in keyOrder: 
     ordDict[k][kO] = exDict[k][kO] 

Если вы пытаетесь распечатать или получить доступ к информации в определенном порядке, то вы должны определить переменную для заказа ключей, которые вы хотите получить доступ. Как и в определении keyorder выше, вы можете создать переменную и loop over, чтобы получить доступ к ключам dict в определенном порядке.


Другой reference post.

0

Для достижения этой цели вам понадобилось бы OrderedDict от collections модуля. См. Это post для справок.

Смежные вопросы