2015-10-29 2 views
0

Я довольно новый для питона и у меня есть сомнения,Сортировка Dict в Словаре в питоне

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

{"boy" : { "NN" : 3 ,"VB" : 3, "PP" : 2 } } 

В случае возникновения конфликта ценностей, как показано в приведенном выше примере, я хочу сортировать внутренний dict на основе их ключей в порядке убывания. Ответ должен выглядеть так:

{"boy" : {"VB" : 3, "NN" : 3, "PP":2} } 

Как я могу это сделать?

+7

Dicts неупорядоченны и не могут быть отсортированы. Используйте OrderedDict вместо –

+0

Вы только видите, что заказ при печати словаря. Он хранится в памяти неупорядоченно, потому что это хеш-таблица. Посмотрите «печать dict в отсортированном порядке», если вы хотите увидеть его по-разному. – skrrgwasme

+1

Возможный дубликат [Как я могу отсортировать словарь по ключевому слову?] (Http://stackoverflow.com/questions/9001509/how-can-i-sort-a-dictionary-by-key) – skrrgwasme

ответ

2

Используйте OrderedDict.

from collections import OrderedDict 
outer_dict = {"boy" : { "NN" : 3 ,"VB" : 3, "AA" : 2 } } 
for key in outer_dict: 
    inner_dict = outer_dict[key] 
    outer_dict[key] = OrderedDict(sorted(inner_dict.items(), reverse=True)) 
+0

Это решение, я думаю, более вероятно, что вы хотите использовать какую-то другую структуру данных. Каково ваше предназначение? –

0

Вы можете отсортировать внутренние словари, как это:

from collections import OrderedDict 

dict_of_dict = {"boy" : { "NN" : 3 ,"VB" : 3, "AA" : 2 } } 

# sort inner dictionaries by descending key values 
dict_of_dict = {key: OrderedDict(sorted(inner_dict.items(), reverse=True)) 
        for key, inner_dict in dict_of_dict.items()} 

print(dict_of_dict) # -> {'boy': OrderedDict([('VB', 3), ('NN', 3), ('AA', 2)])} 
Смежные вопросы