Сортировка в списке - PullRequest
       5

Сортировка в списке

3 голосов
/ 03 сентября 2010

У меня есть это:

dictionary = { (month, year) : [int, int, int] }

Я хотел бы получить список кортежей / списков с упорядоченными данными (по месяцам и годам):

#example info
list = [(8,2010,2,5,3),(1,2011,6,7,8)...]

I 'Я пробовал несколько раз, но я не могу найти решение.

Спасибо за вашу помощь.

Ответы [ 3 ]

5 голосов
/ 03 сентября 2010

Не используйте в качестве идентификатора встроенные имена - это ужасная практика, без каких-либо преимуществ, и это * в конечном итоге приведет к некоторому странному неправильному поведению. Поэтому я называю результат thelist (произвольный, анодный, просто точный идентификатор), , а не list (затенение встроенного).

import operator

thelist = sorted((my + tuple(v) for my, v in dictionary.iteritems()),
                 key = operator.itemgetter(1, 0))
0 голосов
/ 03 сентября 2010

Это очень лаконичный способ сделать то, что вы просите.

l = [(m, y) + tuple(d[(y, m)]) for y, m in sorted(d)]
0 голосов
/ 03 сентября 2010

Примерно так должно получиться:

>>> d = { (8, 2010) : [2,5,3], (1, 2011) : [6,7,8], (6, 2010) : [11,12,13] }
>>> sorted((i for i in d.iteritems()), key=lambda x: (x[0][1], x[0][0]))
[((6, 2010), [11, 12, 13]), ((8, 2010), [2, 5, 3]), ((1, 2011), [6, 7, 8])]

(Предполагается, что лямбда должна сортироваться сначала по году, а затем по месяцу.)

См. Лучший ответ Алекса Мартелли о том, как использовать itemgetter для решения этой проблемы.

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