Найти - Пользователи
Полная версия: Сортировка словаря
Начало » Python для новичков » Сортировка словаря
1
electromind
Как отсортировать словарь по значению, а не по ключу ?

Есть словарь вида:
{'googlemail.com': 2, ‘reddit.com’: 2, ‘google.com’: 19, ‘outlook.com’: 4, ‘microsoft.com’: 2, ‘yandex.ru’: 8, ‘mail.ru’: 6, ‘vk.com’: 4}
нужно отсортировать и вывести на печать ключи в порядке убывания значений
ajib6ept
dic = {'googlemail.com': 2, 'reddit.com': 2, 'google.com': 19, 'outlook.com': 4, 'microsoft.com': 2, 'yandex.ru': 8, 'mail.ru': 6, 'vk.com': 4}
v_dic =  sorted(list(set([v for k,v in dic.iteritems()])), reverse=True)
print v_dic
for value in v_dic:
    for k, v in dic.iteritems():
        if v == value:
            print k

py.user.next
>>> d = {'googlemail.com': 2,
...      'reddit.com': 2,
...      'google.com': 19,
...      'outlook.com': 4,
...      'microsoft.com': 2,
...      'yandex.ru': 8,
...      'mail.ru': 6,
...      'vk.com': 4}
>>> 
>>> lst = [i[1] for i in
...        sorted(((v, k) for k, v in d.items()),
...               reverse=True)]
>>> lst
['google.com', 'yandex.ru', 'mail.ru', 'vk.com', 'outlook.com', 'reddit.com', 'microsoft.com', 'googlemail.com']
>>>
bismigalis
#!/usr/bin/env python
from operator import itemgetter
d = {'googlemail.com': 2, 'reddit.com': 2, 'google.com': 19,
     'outlook.com': 4, 'microsoft.com': 2, 'yandex.ru': 8,
     'mail.ru': 6, 'vk.com': 4}
map(itemgetter(0),
    sorted(d.items(),
           key=itemgetter(1),
           reverse=True))

#!/usr/bin/env hy
(import [operator [itemgetter]])
(def d {"googlemail.com" 2 "reddit.com" 2 "google.com" 19
	"outlook.com" 4 "microsoft.com" 2 "yandex.ru" 8
        "mail.ru" 6 "vk.com" 4})
(map (itemgetter 0)
     (apply sorted 
	    [(.items d)] 
	    {"key" (itemgetter 1) "reverse" True}))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB