Отсортировать словарь по определённому значению

Мне нужно отсортировать словарь words по значению b, как это сделать не совсем понимаю.

i = 0
    words = {}
    res = txt.get()
    with open('word_search.csv', newline='') as File:
        reader = csv.reader(File)
        for row in reader:
            b = fuzz.WRatio(res, row)
            if b >= 75:
                words[i] = [b, row]
                i += 1
    sorted(words,reverse=True)
    for row in words:
        print(words[row])

Входное слово: googl

Пример вывода:

[90, ['go']]
[90, ['l']]
[90, ['o']]
[90, ['g']]
[91, ['google']]
[90, ['oo']]
[90, ['gl']]
[90, ['og']]
[90, ['goo']]
[89, ['goog']]
[90, ['googlebot']]
[75, ['gol']]
[90, ['googling']]
[83, ['googled']]

Ответы (1 шт):

Автор решения: CrazyElf

Не сразу понял, что у вас словарь, плюс ключи словаря - просто порядковые номера в списке, а не рейтинг. Вы не запоминаете никуда результат сортировки, а кроме того у вас сортировка идёт по ключу словаря, где нет нужной для сортировки информации. Можно сделать так:

for k,v in sorted(words.items(), key=lambda x: x[1][0], reverse=True):
    print(v[0], v[1])

Вывод:

91 ['google']
90 ['l']
90 ['o']
90 ['g']
90 ['oo']
90 ['gl']
90 ['og']
90 ['goo']
90 ['googlebot']
90 ['googling']
89 ['goog']
83 ['googled']
75 ['gol']

Пояснения:

  • итерация по словарю равнозначна итерации по его ключам .keys(), поэтому нужно использовать .items(), чтобы у sorted была полная информация об элементах словаря, а не только ключ, котором только порядковый номер элемента
  • содержимое элементов при этом получается такое примерно: (0, [90, ['l']]), т.е. список в кортеже, и чтобы достать оттуда рейтинг нужно взять элемент 1 из кортежа, чтобы получить список, и потом взять элемент 0 этого списка

В целом вы не очень правильно используете словарь, у вас фактически получился аналог списка, к списку точно так же можно обращаться по порядковым номерам элементов, большого смысла в таком словаре нет. Имело бы больше смысла сделать словарь, ключом которого было бы значение рейтинга, а значением - список слов, у которых такой рейтинг. Тогда сортировку можно было бы делать как-раз таки просто по ключам словаря.

→ Ссылка