Сортировка вложенного словаря Python - PullRequest
1 голос
/ 15 марта 2011

У меня есть словарь Python в следующем формате.

{'KEY': (NUMBER, [DATE1, DATE2]}

Например, {'a': (10, ['2010/04/11','2009/03/11'])}

Как я могу отсортировать этот словарь по DATE1 (первый элемент в списке)?

РЕДАКТИРОВАТЬ

Можно ли выполнить повторную сортировку, если дата совпадает?Например.

{'a': (10, ['2010/04/11','2009/03/11'])}
{'b': (20, ['2010/04/11','2009/03/10'])}
{'c': (100, ['2009/01/01'])}

->

{'b': (20, ['2010/04/11','2009/03/10'])} // this comes first as 20 > 10
{'a': (10, ['2010/04/11','2009/03/11'])}
{'c': (100, ['2009/01/01'])}

Ответы [ 2 ]

4 голосов
/ 15 марта 2011

Словари являются несортируемыми.Если вы хотите отсортированный список из 2-х кортежей:

sorted(D.iteritems(), key=lambda x: x[1][1][0])

Передайте выражение в datetime.strptime(), если вы хотите, чтобы оно было в порядке дат вместо порядка строк (не то, чтобы существующая дата была огромной,формат ...).

3 голосов
/ 15 марта 2011

Если вы используете Python 2.7 или более позднюю версию, вы можете использовать новый класс collection.OrderedDict.Наряду с кодом Ignacio для выполнения реальной сортировки, это должно дать вам то, что вы ищете.

Скажите, что a ваш текущий словарь, тогда

OrderedDict(sorted(a.items(), key=lambda x: (x[1][1][0], -x[1][0])))

вернет отсортированную версию.

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