Как отобразить словарь в словаре в отсортированном порядке с Python? - PullRequest
3 голосов
/ 02 мая 2019

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

Может кто-нибудь объяснить, как это делается?

Мой текущий код:

dDict = {}

dDict.update( { "Bob Barker":   {"age":50, "city":"Los Angeles", "state":"CA" } } )
dDict.update( { "Steve Norton": {"age":53, "city":"Vulcan",      "state":"CA" } } )
dDict.update( { "John Doe":     {"age":27, "city":"Salem",       "state":"OR" } } )
dDict.update( { "Mary Smith":   {"age":24, "city":"Detroit",     "state":"MI" } } )

print("Name         Age City        State")
for d in dDict:
    print ("{:12} {:3} {:11} {:2}".format(d, dDict[d]["age"], dDict[d]["city"], dDict[d]["state"]) )

Вывод:

Name         Age City        State
Steve Norton  53 Vulcan      CA
Mary Smith    24 Detroit     MI
Bob Barker    50 Los Angeles CA
John Doe      27 Salem       OR

Что бы я хотел:

Name         Age City        State
Bob Barker    50 Los Angeles CA
Steve Norton  53 Vulcan      CA
Mary Smith    24 Detroit     MI
John Doe      27 Salem       OR

1 Ответ

2 голосов
/ 02 мая 2019

Для Python 3.6 и> вы можете сделать :

dDict = {}

dDict.update( { "Bob Barker":   {"age":50, "city":"Los Angeles", "state":"CA" } } )
dDict.update( { "Steve Norton": {"age":53, "city":"Vulcan",      "state":"CA" } } )
dDict.update( { "John Doe":     {"age":27, "city":"Salem",       "state":"OR" } } )
dDict.update( { "Mary Smith":   {"age":24, "city":"Detroit",     "state":"MI" } } )

print(dDict)

dDict = (dict(sorted(dDict.items(), key=lambda x: x[1]["state"])))

print("Name         Age City        State")
for d in dDict:
    print ("{:12} {:3} {:11} {:2}".format(d, dDict[d]["age"], dDict[d]["city"], dDict[d]["state"]) )

Отпечатки:

Bob Barker    50 Los Angeles CA
Steve Norton  53 Vulcan      CA
Mary Smith    24 Detroit     MI
John Doe      27 Salem       OR

Для меня.

В Python 3.6и выше, вы можете отсортировать словарь следующим образом:

dDict = (dict(sorted(dDict.items(), key=lambda x: x[1]["state"])))

Здесь я ввел lambda x: x[1]["state"] в ключе, как вы хотели отсортировать по state.Вы можете изменить это, если хотите отсортировать другим способом.

Для python 2.7 вы можете сделать :

from collections import OrderedDict
dDict = OrderedDict(sorted(dDict.items(), key=lambda x: x[1]["state"]))

, чтобы получить аналогичный результат.

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