2015-12-11 4 views
-1
my_dict = {1: {'f1': 'name', 'f2': 'age', 'f3': 'class'}, 2: {'f1': 'company', 'f2': 'salary', 'f3': 'age', 'f4': 'class'}, 3: {'f1': 'Feature', 'f2': 'sum', 'f3': 'diff', 'f4': 'multiply', 'f5': 'div', 'f6': 'and', 'f7': 'or', 'f8': 'not', 'f9': 'dummy'}} 

мне нужен реверс, какрода словарю в обратном порядке

my_dict = { 3: {'f1': 'Feature', 'f2': 'sum', 'f3': 'diff', 'f4': 'multiply', 'f5': 'div', 'f6': 'and', 'f7': 'or', 'f8': 'not', 'f9': 'dummy'},2: {'f1': 'company', 'f2': 'salary', 'f3': 'age', 'f4': 'class'},1: {'f1': 'name', 'f2': 'age', 'f3': 'class'}, } 

Я попытался с помощью сортирует, Ordereddict, обратные функции по словарю, но он не работает

+1

OrderedDict просто запоминает порядок вставки ключей, поэтому вы можете начать с вашего dict, который у вас уже есть, и вставить его (ключ, значение) в правильном порядке в новом OrderedDict – Tedil

ответ

0

OrderedDict помнит только вставка порядок, а dict не имеет порядка, поэтому вы должны построить свой OrderedDict из списка кортежей (или вставлять значения один за другим после построения ord. dict):

>>> from collections import OrderedDict 
>>> od = OrderedDict([(3, 'three'), (2, 'two'), (1, 'one')]) 
>>> od 
OrderedDict([(3, 'three'), (2, 'two'), (1, 'one')]) 

Как вы можете видеть, заказ сохраняется.

Если вам нужно как заказы, мы можем перебрать key, value пар с помощью od.items(), и мы можем изменить порядок этих пар с помощью reversed:

>>> reversed_od = OrderedDict(reversed(od.items())) 
>>> reversed_od 
OrderedDict([(1, 'one'), (2, 'two'), (3, 'three')]) 
-1

Python ДИКТ является неупорядоченным, то это означает, что вы не может управлять порядком элементов. Единственный способ сделать это - OrderedDict вместо dict.

Если вы хотите сохранить данные из Словаря сортируется по убыванию по ключевому это IMO самого простой метод:

OrderedDict(sorted(my_dict.items(), key=lambda t: t[0], reverse=True)) 

Here вы можете прочитать больше о OrderedDict.

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