Форум сайта python.su
Как отсортировать словарь по значению, а не по ключу ?
Есть словарь вида:
{'googlemail.com': 2, ‘reddit.com’: 2, ‘google.com’: 19, ‘outlook.com’: 4, ‘microsoft.com’: 2, ‘yandex.ru’: 8, ‘mail.ru’: 6, ‘vk.com’: 4}
нужно отсортировать и вывести на печать ключи в порядке убывания значений
Офлайн
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
Отредактировано ajib6ept (Апрель 11, 2014 23:00:03)
Офлайн
>>> 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'] >>>
Отредактировано py.user.next (Апрель 11, 2014 22:11:10)
Офлайн
#!/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}))
Отредактировано bismigalis (Апрель 12, 2014 12:24:25)
Офлайн