Сортировка словаря по значениям в python - PullRequest
4 голосов
/ 13 апреля 2011

У меня есть словарь с ключом в качестве слов и значениями в виде целых чисел.

Можно ли отсортировать словарь по значениям?

Я хочу иметь возможность взять 10 самых популярныхслова в моем словаре.Значения представляют количество слов, а ключи - слово.

counter = 9
for a,b in sorted(dict_.iteritems()):
        if counter > 0:
            print str(a),str(b)+"\n"
            counter-=1

Это то, что у меня есть, но это только распечатка первых 10 элементов в словаре.Как бы я распечатал топ 10 самых частых предметов?(т.е. значения с наивысшим значением int в качестве значения?)

Ответы [ 5 ]

2 голосов
/ 13 апреля 2011

Попробуйте sorted(dict_.iteritems(), key=lambda item: -item[1]).

2 голосов
/ 13 апреля 2011

Использование

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

или

import operator
sorted(.... key=operator.itemgetter(1)) 

для сортировки на основе значений элементов. Вы можете использовать аргумент reverse=True для инвертирования порядка результатов (по умолчанию oder - возрастающие значения) и нотации среза (results[:10]) для итерации только первых 10 элементов. Вы также можете опустить флаг реверса и использовать [-10:], чтобы получить топ 10.

2 голосов
/ 13 апреля 2011

Словари Python неупорядочены, но вы можете преобразовать его в список кортежей с помощью items() и передать соответствующую функцию сравнения параметру sort 'key.

sorted() имеет аналогичный ключевой параметр. Вы хотите отсортировать по lambda item: item[1], чтобы получить значения из items() и iteritems(). Тогда вы можете просто отрезать первые N элементов.

Итак ...

for a, b in sorted(dict_.iteritems(), key=lambda item: item[1], reverse=True)[:10]:
    print a, b
1 голос
/ 13 апреля 2011

Вы не можете сортировать диктанты вообще.Они неупорядочены, то есть порядок не определен и совершенно бессмысленен (для вас).

Однако вы можете отсортировать .iteritems() с помощью key=operator.itemgetter(1) (другие ответы сводят на нет значение, но вы можете просто использовать фрагмент[-10:], чтобы получить 10 последних предметов).Или, в данном конкретном случае, просто используйте collections.Counter, который поставляется с методом .most_common(n).

0 голосов
/ 13 апреля 2011

Чтобы сделать это, вы должны отсортировать его с помощью аргумента key.key должна быть функцией, которая принимает элемент в качестве входных данных и возвращает другой, который должен быть отсортирован, и она будет сортировать все элементы с помощью этого ключа.И возьмите последние 10 элементов (отсортировано по возрастанию).В вашем случае вам нужно будет сделать что-то вроде этого:

for a,b in sorted(key=lambda x: (x[1], x[0]), dict_.iteritems())[-10:]:
    print str(a), str(b)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...