Как отобразить словарь по значениям по убыванию? - PullRequest
0 голосов
/ 18 июля 2011

У меня есть следующий словарь:

{'aapl': 4.0,
 'abandon': 4.0,
 'absenc': 3.0,
 'accept': 1.0,
 'access': 3.0,
 'accessori': 4.0,
 'accord': 3.0,
 'achiev': 1.0,
 'acquir': 1.5,
 'acquisit': 2.3333333333333335,
 'across': 5.0,
 'activ': 2.0,
 'ad': 2.2692307692307692,
 'add': 2.5,
 'addit': 2.8333333333333335,
}

Как отобразить их по убыванию (по убыванию)?

Я слышал, что есть способ сделать это через кортежи или что-то еще?

Ответы [ 4 ]

5 голосов
/ 18 июля 2011
>>> D={'aapl': 4.0,
...  'abandon': 4.0,
...  'absenc': 3.0,
...  'accept': 1.0,
...  'access': 3.0,
...  'accessori': 4.0,
...  'accord': 3.0,
...  'achiev': 1.0,
...  'acquir': 1.5,
...  'acquisit': 2.3333333333333335,
...  'across': 5.0,
...  'activ': 2.0,
...  'ad': 2.2692307692307692,
...  'add': 2.5,
...  'addit': 2.8333333333333335,
... }
>>> sorted(D, key=D.get, reverse=True)
['across', 'aapl', 'accessori', 'abandon', 'accord', 'access', 'absenc', 'addit', 'add', 'acquisit', 'ad', 'activ', 'acquir', 'accept', 'achiev']
>>> 

Если вы тоже хотите значения,

>>> from operator import itemgetter
>>> sorted(D.items(), key=itemgetter(1), reverse=True)
[('across', 5.0), ('aapl', 4.0), ('accessori', 4.0), ('abandon', 4.0), ('accord', 3.0), ('access', 3.0), ('absenc', 3.0), ('addit', 2.8333333333333335), ('add', 2.5), ('acquisit', 2.3333333333333335), ('ad', 2.2692307692307692), ('activ', 2.0), ('acquir', 1.5), ('accept', 1.0), ('achiev', 1.0)]
1 голос
/ 18 июля 2011

Это самый быстрый способ, которым я знаю:

d = { ... } # your dictionary
for name, score in sorted(d.iteritems(), key=operator.itemgetter(1), reverse=True):
  print score, name
0 голосов
/ 18 июля 2011
mydict = {'aapl': 4.0,
 'abandon': 4.0,
 'absenc': 3.0,
 'accept': 1.0,
 'access': 3.0,
 'accessori': 4.0,
 'accord': 3.0,
 'achiev': 1.0,
 'acquir': 1.5,
 'acquisit': 2.3333333333333335,
 'across': 5.0,
 'activ': 2.0,
 'ad': 2.2692307692307692,
 'add': 2.5,
'addit': 2.8333333333333335,
}
sorted([(y,x) for x,y in mydict.items()], reverse=True)

Это приводит к:

[(5.0, 'across'), (4.0, 'accessori'), (4.0, 'abandon'), (4.0, 'aapl'), (3.0, 'accord'), (3.0, 'access'), (3.0, 'absenc'), (2.8333333333333335, 'addit'), (2.5, 'add'), (2.3333333333333335, 'acquisit'), (2.269230769230769, 'ad'), (2.0, 'activ'), (1.5, 'acquir'), (1.0, 'achiev'), (1.0, 'accept')]

Это имеет побочный эффект сортировки по ключу для одинаковых значений (например, для значения == 3.0, 'absenc' <'access'<'accord') </p>

0 голосов
/ 18 июля 2011
by_score = yourdict.items()
by_score.sort(key=operator.itemgetter(1), reversed=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...