Sort dict по значению python

Предположим, что у меня есть dict.

data = {1:'b', 2:'a'}

И я хочу сортировать данные по 'b' и 'a', поэтому получаю результат

'a','b'

Как это сделать?
Любые идеи?

Ответы

Ответ 1

Чтобы использовать значения

sorted(data.values())

Чтобы получить соответствующие клавиши, используйте функцию key

sorted(data, key=data.get)

Чтобы получить список кортежей, упорядоченных по значению

sorted(data.items(), key=lambda x:x[1])

Связано: см. обсуждение здесь: Словари упорядочены в Python 3.6+

Ответ 2

Если вы действительно хотите отсортировать словарь вместо получения отсортированного списка, используйте collections.OrderedDict

>>> from collections import OrderedDict
>>> from operator import itemgetter
>>> data = {1: 'b', 2: 'a'}
>>> d = OrderedDict(sorted(data.items(), key=itemgetter(1)))
>>> d
OrderedDict([(2, 'a'), (1, 'b')])
>>> d.values()
['a', 'b']

Ответ 3

Из вашего комментария к ответу gnibbler, я бы сказал, что вам нужен список пар значений ключа, отсортированных по значению:

sorted(data.items(), key=lambda x:x[1])

Ответ 4

Сортировка значений:

sorted(data.values())

возвращает

['a','b']

Ответ 5

Спасибо за все ответы. Вы все мои герои, -)

В конце концов что-то вроде этого:

d = sorted(data, key = d.get)

for id in d:
    text = data[id]

Ответ 6

Я также думаю, что важно отметить, что тип объекта Python dict - это хеш-таблица (подробнее об этом здесь), и, таким образом, не может сортироваться без преобразования его ключей/значений в списки. Это позволяет dict поиск элементов в постоянное время O(1), независимо от размера/количества элементов в словаре.

Сказав это, после сортировки его ключей - sorted(data.keys()) или значений - sorted(data.values()), вы можете использовать этот список для доступа к ключам/значениям в шаблонах проектирования, таких как:

for sortedKey in sorted(dictionary):
    print dictionary[sortedKeY] # gives the values sorted by key

for sortedValue in sorted(dictionary.values()):
    print sortedValue # gives the values sorted by value

Надеюсь, что это поможет.

Ответ 7

В своем комментарии в ответ на John вы предлагаете вам ключи и значения словаря, а не только значения.

PEP 256 предлагает это для сортировки словаря по значениям.

import operator
sorted(d.iteritems(), key=operator.itemgetter(1))

Если вы хотите по убыванию, сделайте это

sorted(d.iteritems(), key=itemgetter(1), reverse=True)

Ответ 8

нет лямбда-метода

# sort dictionary by value
d = {'a1': 'fsdfds', 'g5': 'aa3432ff', 'ca':'zz23432'}
def getkeybyvalue(d,i):
    for k, v in d.items():
        if v == i:
            return (k)

sortvaluelist = sorted(d.values())
sortresult ={}
for i1 in sortvaluelist:   
    key = getkeybyvalue(d,i1)
    sortresult[key] = i1
print ('=====sort by value=====')
print (sortresult)
print ('=======================')

Ответ 9

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

myDictionary={"two":"2", "one":"1", "five":"5", "1four":"4"}

newDictionary={}

sortedList=sorted(myDictionary.values())

for sortedKey in sortedList:
    for key, value in myDictionary.items():
        if value==sortedKey:
            newDictionary[key]=value

Вывод: newDictionary = {'one': '1', 'two': '2', '1four': '4', 'five': '5'}