#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)]
Комментариев нет:
Отправить комментарий