Задать вопрос
@Tayrus0

Как отсортировать словарь по значению?

Есть словарь
workers = {
    'empl1': '13150',
    'empl2': '11100',
    'empl3': '19500',
    'empl4': '3000',
    'empl5': '18000',
    'empl6': '8585',
    'empl7': '1',
    'empl8': '1',
    'empl9': '7000',
    'empl10': '7070',
    'empl11': '2730',
    'empl12': '11615',
    'empl13': '10000',
    'empl14': '7170',
    'empl15': '99999999',
    'empl16': '11000',
    'empl17': '4300',
    'empl18': '666',
    'empl19': '54000'
}

Я хочу отсортировать его по возрастанию, по значениям. Сортирую его так:
sorted_by_value = sorted(workers.items(), key=lambda kv: kv[1], reverse=True)
print(dict(sorted_by_value))
Но на выходе получаю неправильную сортировку:
{
    'empl15': '99999999',
    'empl6': '8585',
    'empl14': '7170',
    'empl10': '7070',
    'empl9': '7000',
    'empl18': '666',
    'empl19': '54000',
    'empl17': '4300',
    'empl4': '3000',
    'empl11': '2730',
    'empl3': '19500',
    'empl5': '18000',
    'empl1': '13150',
    'empl12': '11615',
    'empl2': '11100',
    'empl16': '11000',
    'empl13': '10000',
    'empl7': '1',
    'empl8': '1'
}

Почему так и как его отсортировать?
  • Вопрос задан
  • 131 просмотр
Подписаться 1 Простой 2 комментария
Решения вопроса 1
netpastor
@netpastor
Python developer
sorted_by_value = sorted(workers.items(), key=lambda kv: int(kv[1]), reverse=True)
... print(sorted_by_value)
[('empl15', '99999999'), ('empl19', '54000'), ('empl3', '19500'), ('empl5', '18000'), ('empl1', '13150'), ('empl12', '11615'), ('empl2', '11100'), ('empl16', '11000'), ('empl13', '10000'), ('empl6', '8585'), ('empl14', '7170'), ('empl10', '7070'), ('empl9', '7000'), ('empl17', '4300'), ('empl4', '3000'), ('empl11', '2730'), ('empl18', '666'), ('empl8', '1'), ('empl7', '1')]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
@dimoff66
Кратко о себе: Я есть
Потому что вы сортируете по строкам. Если нужно отсортировать по числам, то

lambda kv: int(kv[1])
Ответ написан
Комментировать
LazyTalent
@LazyTalent
Data Engineer, Freelancer
Ответ написан
Комментировать
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
{
    key: value 
    for _, key, value in 
    sorted(
        (-int(v), k, v)
        for k, v in
        workers.items()
    )
}
Ответ написан
Комментировать
meaqese
@meaqese
workers = {
    'empl1': '13150',
    'empl2': '11100',
    'empl3': '19500',
    'empl4': '3000',
    'empl5': '18000',
    'empl6': '8585',
    'empl7': '1',
    'empl8': '1',
    'empl9': '7000',
    'empl10': '7070',
    'empl11': '2730',
    'empl12': '11615',
    'empl13': '10000',
    'empl14': '7170',
    'empl15': '99999999',
    'empl16': '11000',
    'empl17': '4300',
    'empl18': '666',
    'empl19': '54000'
}

sorted_dict = sorted(workers.items(), key=lambda worker: int(worker[1]))
print(sorted_dict)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы