Home

Tags

Сортировка и группировка списков в python (groupby, sorted)

2010-01-31 python sorted

sorted
Для сортировки списка можно использовать ф-ию sorted(), в качестве результата она возвращает отсортированный список. Если нужно отсортировать по конкретному параметру, то можно задать ключ sorted( [], key=...)

groupby из itertools
Ф-ия groupby группирует элементы в списки, например такой список "112331122" после группировки будет таким:

 [1,[ 11] ],[2,[2] ], [3,[33] ], [1,[11] ], [2,[22] ]
ф-ия сгруппировала одинаковые элементы лежащие рядом, для того что-б можно было сгруппировать все одинаковые элементы то нужно весь список сортировать: groupby( sorted("112331122") ), в итоге получим то что нужно:
 [1,[1111] ], [2,[222] ], [3,[33] ]
Если нужно сгруппировать по конкретному параметру, то можно задать ключ groupby( [], key=...)

Пример группировки "таблицы", где вторым параметром является ключевое значение
# coding: utf-8

from itertools import groupby

d = [
     [ 'Windows', 'os' ],
     [ 'Linux', 'os' ],
     [ 'Photoshop', 'soft' ],
     [ 'Mac OS', 'os' ],
     [ 'Calc', 'soft' ]
]

for g in groupby( sorted(d,key=lambda x:x[1]) ,key=lambda x:x[1]):
    print g[0]
    for i in g[1]:
        print ' - ',i

Результат
os
 -  ['Windows', 'os']
 -  ['Linux', 'os']
 -  ['Mac OS', 'os']
soft
 -  ['Photoshop', 'soft']
 -  ['Calc', 'soft']