Форум сайта python.su
0
Встала такая задача, посчитать кол-во чисел во множестве, и отсортировать их по количеству.
То есть есть список
Нужно получить
До этого я работал с PHP, и это задачу просто бы решил сделав ассоциативный массив, и отсортировав его.
Но в Python'е, если я правильно понимаю, нельзя работать так со списками(сортировать их по ключу).
Как можно решить задачу на питоне?
p.s. Если более глобально, у меня есть список чисел, и мне нужно построить гистограмму на pylab распределения количества чисел.
p.p.s изучаю питон несколько дней, пожалуйста отвечайте попроще))
Офлайн
0
узнать кол-во уникальных:
>>> lst = [4,5,4,7,1,8,12,4,1,8]
>>> len(set(lst))
6
>>> lst = [4,5,4,7,1,8,12,4,1,8]
>>> keys = {}
>>> for num in lst:
... keys.setdefault(num, 0)
... keys[num] += 1
...
>>> keys
{1: 2, 4: 3, 5: 1, 7: 1, 8: 2, 12: 1}
Офлайн
0
О, кое что узнал)
Но вот по поводу последнего.
как получить список {1: 2, 4: 3, 5: 1, 7: 1, 8: 2, 12: 1} я знал.
Но как мне получить его отсортированным по значению?
Офлайн
20
Словарь не может быть упорядоченным, за таким может быть список:
>>> import operator
>>> mydict = {1: 2, 4: 3, 5: 1, 7: 1, 8: 2, 12: 1}
>>> mylist = sorted(mydict.items(), key = operator.itemgetter(1))
>>> mylist
[(5, 1), (7, 1), (12, 1), (1, 2), (8, 2), (4, 3)]
Отредактировано (Июль 24, 2011 17:50:25)
Офлайн
253
Kein- смотрите документацию
p.s. Если более глобально, у меня есть список чисел, и мне нужно построить гистограмму на pylab
import itertools
[(i,len(list(j))) for (i,j) in itertools.groupby(sorted([1,1,1,2,2,3,3,5,5,5]))]
Отредактировано (Июль 24, 2011 20:09:54)
Офлайн
7
Один из самых медленных вариантов в лоб.
sorted( (k, lst.count(k)) for k in set(lst) )
Офлайн
36
Еще можно воспользоваться классом Counter из collections
from collections import Counter
Counter([4,5,4,7,1,8,12,4,1,8]).most_common()[::-1]
Офлайн
20
> Еще можно воспользоваться классом Counter из collections
“ImportError: cannot import name Counter”, а версию Python'а (2.6.6) указать слабо :-) ?
..bw
Офлайн
36
bw2.7, 3.2
ImportError: cannot import name Counter
Офлайн
857
>>> lst = [4, 5, 4, 7, 1, 8, 12, 4, 1, 8]
>>> dct = {i: lst.count(i) for i in set(lst)}
>>> plst = [i for i in sorted(dct.items(), key=lambda i: i[1])]
>>> dct
{1: 2, 4: 3, 5: 1, 7: 1, 8: 2, 12: 1}
>>> plst
[(5, 1), (7, 1), (12, 1), (1, 2), (8, 2), (4, 3)]
>>>
Офлайн