Форум сайта python.su
0
Добрый вечер. При изучении словарей появилась проблема при решении одной задачи. У нас есть словарь:
{'hi': 2, 'what': 1, 'is': 3, 'your': 1, 'name': 3, 'my': 2, 'bond': 2, 'james': 1, 'damme': 4, 'van': 3, 'claude': 2, 'jean': 1}
words = {'hi': 2, 'what': 1, 'is': 3, 'your': 1, 'name': 3, 'my': 2, 'bond': 2, 'james': 1, 'damme': 4, 'van': 3, 'claude': 2, 'jean': 1} words_list = [(val, key) for key, val in words.items() ] words_list.sort(reverse=True) print(words_list) #[(4, 'damme'), (3, 'van'), (3, 'name'), (3, 'is'), (2, 'my'), (2, 'hi'), (2, 'claude'), (2, 'bond'), (1, 'your'), (1, 'what'), (1, 'jean'), (1, 'james')]
Отредактировано i2n7r1t (Фев. 1, 2017 17:09:37)
Офлайн
568
Фиг его знает, что такое лексикографический порядок, но все хитрые сортировки выполняются с применением функции key, как-то так например.
words = {'hi': 2, 'what': 1, 'is': 3, 'your': 1, 'name': 3, 'my': 2, 'bond': 2, 'james': 1, 'damme': 4, 'van': 3, 'claude': 2, 'jean': 1} print(sorted(words.items(), key = lambda k, v: len(v)))
Офлайн
0
FishHookЭто словарный порядок, т.е. грубо говоря нам нужно по числам порядок по убыванию, а по словам по возрастанию(т.е. от A до Z)
Фиг его знает, что такое лексикографический порядок,
Traceback (most recent call last): File "py.py", line 31, in <module> print(sorted(words.items(), key = lambda k, v: len(v))) TypeError: <lambda>() missing 1 required positional argument: 'v'
Офлайн
76
words = {'hi': 2, 'what': 1, 'is': 3, 'your': 1, 'name': 3, 'my': 2, 'bond': 2, 'james': 1, 'damme': 4, 'van': 3, 'claude': 2, 'jean': 1} words =sorted(words.items()) print(sorted(words, key=lambda k:k[1], reverse=True))
Офлайн
0
спасибо, осталось разобраться как работает участок, но это уже на моей совести.
key=lambda k:k[1]
Офлайн
73
Офлайн
857
Тут надо использовать свойство сортировки обычных кортежей (кортежи сначала сортируются по первому элементу, потом по второму, потом по третьему и так далее)
>>> d = {'hi': 2, ... 'what': 1, ... 'is': 3, ... 'your': 1, ... 'name': 3, ... 'my': 2, ... 'bond': 2, ... 'james': 1, ... 'damme': 4, ... 'van': 3, ... 'claude': 2, ... 'jean': 1} >>> >>> out = [(j, i) for i, j in sorted((v, k) for k, v in d.items())] >>> out [('james', 1), ('jean', 1), ('what', 1), ('your', 1), ('bond', 2), ('claude', 2), ('hi', 2), ('my', 2), ('is', 3), ('name', 3), ('van', 3), ('damme', 4)] >>>
Отредактировано py.user.next (Фев. 2, 2017 03:11:17)
Офлайн