Как отсортировать значения в переменных в порядке убывания?

Мне нужно отсортировать значения в переменных в порядке убывания, при этом добавив этим переменным имена. К примеру у нас есть два пользователя и нужно пересчитать, сколько сообщений они отправил. Количество этих сообщений хранится в переменных. Вот все, что я смог написать:

a_1 = 234
a_2 = 345

a = [a_1, a_2]

a = sorted(a, reverse = True)
print(a)

И в итоге у меня выводит это: [345, 234], а мне нужно вывести так: [User_1: 345, User_2: 234. Надеюсь, я понятно объяснил. Если что, извините! Я с массивами до этого не работал.


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

Автор решения: Denis640Kb
user1 = 234
user2 = 345
user3 = 545
user4 = 145
user5 = 325
user6 = 15
user7 = 45

a = [user1, user2, user3, user4, user5, user6, user7]

i=1
new = {}
for f in a:
    name = 'user'+str(i)
    new[name] = f
    i+=1

new = sorted_by_value = sorted(new.items(), key=lambda kv: -kv[1])
print(new)
→ Ссылка
Автор решения: Teivaz

Приведённый пример [User_1: 345, User_2: 234] не является массивом. Массив это последовательность элементов. В данном случае это последовательность пар ключ-значение.

Этому может соответствовать тип dict

{'User_1': 345, 'User_2': 234}

Либо же массив кортежей

[('User_1', 345), ('User_2', 234)]

Сам по себе тип dict - не упорядоченный, но существует OrderedDict которы сохраняет порядок и, следовательно, может быть отсортирован:

# исходные данные
data = {'User_1': 345, 'User_2': 234}
# Сортировка по значению:
orderedData = OrderedDict(sorted(data.items(), reverse = True, key = lambda t: t[1]))

Тот же подход будет использован в случае с массивом кортежей:

# исходные данные
data = [('User_1', 345), ('User_2', 234)]
# Сортировка по значению:
orderedData = sorted(data, reverse = True, key = lambda t: t[1])
→ Ссылка