Я хочу ранжировать документ и хранить их в списке в Python - PullRequest
2 голосов
/ 29 июня 2010

Я только начинающий в питоне. У меня есть документ score= {1:0.98876, 8:0.12245, 13:0.57689}, который хранится в словаре. Ключи соответствуют серии идентификаторов документов, а значения соответствуют баллам для каждого идентификатора документа. Как я оцениваю документ, основанный на оценках?

inverse=[(value, key) for key, value in score.items()]
fmax=max(inverse)

Я уже нашел максимальные значения, используя метод выше, который возвращает:

(0.98876,1)

Но я хочу упорядочить документы и сохранить их в списке:

{(0.98876,1),(0.57689,13),(0.12245,8)}

Ответы [ 6 ]

3 голосов
/ 29 июня 2010
sorted(score.items(), key=lambda x:-x[1])

должен сделать трюк

Порядок элементов в словаре не определен, поэтому результат сортировки должен быть сохранен в списке (или OrderedDict ).

Вы должны преобразовать его в список кортежей с помощью items (). С помощью sorted () вы можете сортировать их, параметр key указывает сортировать их в соответствии с инверсией второго элемента кортежа.

Полный пример:

>>> score= {1:0.98876, 8:0.12245, 13:0.57689}
>>> sorted(score.items(), key=lambda x:-x[1])
[(1, 0.98875999999999997), (13, 0.57689000000000001), (8, 0.12245)]
>>> print [(y,x) for (x,y) in _]
[(0.98875999999999997, 1), (0.57689000000000001, 13), (0.12245, 8)]

Здесь также показано, как обратить элементы в кортеже, если вы действительно хотите это сделать.

2 голосов
/ 29 июня 2010

, если вы хотите изменить исходный список inverse, тогда используйте inverse.sort(reverse=True).
Если вы хотите создать новый список и оставить исходный список без изменений, используйте sorted(inverse, reverse=True).

Вам не нужен промежуточный список, просто используйте score:

>>> sorted(score.items(), key=lambda x: x[1], reverse=True)
[(1, 0.98876), (13, 0.57689), (8, 0.12245)]
0 голосов
/ 29 июня 2010

, если вы хотите ранжировать itens в dict:

score = {1:0.98876, 8:0.12245, 13:0.57689}
# get a list of items...
list = score.items()
print list
[(8, 0.12245), (1, 0.98875999999999997), (13, 0.57689000000000001)]

# Sort items.
list.sort()
print list 
[(1, 0.98875999999999997), (8, 0.12245), (13, 0.57689000000000001)]
# reverse order
list.reverse()
print list
[(13, 0.57689000000000001), (8, 0.12245), (1, 0.98875999999999997)]
0 голосов
/ 29 июня 2010

используйте это: inverse.sort(reverse=True)

посмотрите здесь для получения дополнительной информации о сортировке

0 голосов
/ 29 июня 2010

Сортировать обратный список:

inverse.sort()

Это вернет список в порядке возрастания, если вы хотите, чтобы он был в обратном порядке, переверните его также:

inverse.reverse()
0 голосов
/ 29 июня 2010

После вашего обратного метода, это поможет:

ranked = inverse.sort()

А вот еще немного информации о сортировке в python: http://wiki.python.org/moin/HowTo/Sorting/

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