Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

Python 3. Сортировка словаря: вывести содержимое словаря в порядке возрастания

#python #python_3x


Имеется словарь из 10 элементов (некоторых может не быть), например:
a = {2:5, 5:3, 7:4, 10:4}

Требуется вывести содержимое словаря в порядке возрастания (неубывания) значений:

5 3, 7 4, 10 4, 2 5

Думаю, что данный код выглядит коряво:

a = {2:5, 5:3, 7:4, 10:4}
l = []
l1 = []

for i in a:
    l1.append(a[i])
    l1.append(i)
    l.append(l1)
    l1 = []

l.sort()

for i in range(len(l)):
    print(l[i][1], l[i][0])


Как его можно подправить?

Используется Питон 3.5
    


Ответы

Ответ 1



Чтобы отсортировать данные по значению, можно воспользоваться конструкцией list comprehension a = {2:5, 5:3, 7:4, 10:4, 8:7, 3:2, 0:0, 1:9} def sort_dictionary_by_value(dictionary): list_of_sorted_pairs = [(k, dictionary[k]) for k in sorted(dictionary.keys(), key=dictionary.get, reverse=False)] # Так мы создаём кортежи (ключ, значение) из отсортированных элементов по ключу равному "значение ключа" # Также отсортированы будут и ключи, имеющие одно значение # "reverse = False" говорит, что перебор нужно делать в обычном порядке # Если нужно отсортировать значения в обратном порядке, то reverse можно сделать = True return list_of_sorted_pairs # после сделанных операций возвращаем получившийся список Осуществить вывод, который вам нужен, можно так: new_a = sort_dictionary_by_value(a) for x in new_a: print(x[0], x[1])

Ответ 2



Классический вариант: In [36]: from operator import itemgetter In [37]: sorted(a.items(), key=itemgetter(1)) Out[37]: [(0, 0), (3, 2), (5, 3), (7, 4), (10, 4), (2, 5), (8, 7), (1, 9)]

Комментариев нет:

Отправить комментарий