Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 08.02.2022
Сообщений: 2

Сортировка словаря

08.02.2022, 17:06. Показов 2854. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу отсортировать словарь по значениям и ключами



Пример словаря:

words = {'5': 'green', '4': ['pink', 'grey'], '3': 'red'}



Сортировка должна происходить так: ключи выстраиваются по возрастанию, если в ключе есть несколько значения, значения сортируются в алфавитном порядке.



words = {'3': 'red', '4': ['grey', 'pink'], '5': 'green'} - таким хочется видеть словарь



Возможно это?
если да, то как его можно сделать таким.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.02.2022, 17:06
Ответы с готовыми решениями:

Сортировка словаря
Здравствуйте, есть словарь вида d = {'123' : , '444' : , '333' : } Необходимо отсортировать сначала ключи (сортировать в виде чисел, то...

Сортировка словаря
Есть допустим такой словарь: {'дом': 7, 'осёл': 5, 'петух': 5, 'огонёк': 4, 'собака': 3, 'кот': 3, 'окошко': 2, 'ночь': 1, 'дуб': 1,...

Сортировка словаря по значению Python 2.3
Здравствуйте. Как можно рассортировать словарь по значению по Убыванию на Python версии 2.3? Пример словаря: arr = {'key1': 38,...

7
 Аватар для Aviz__
2736 / 2046 / 506
Регистрация: 17.02.2014
Сообщений: 9,462
08.02.2022, 17:11
Цитата Сообщение от melisschase Посмотреть сообщение
таким хочется видеть словарь
зачем? словари не поддерживают порядок, же.
0
0 / 0 / 0
Регистрация: 08.02.2022
Сообщений: 2
08.02.2022, 17:25  [ТС]
Для решения задачи

Задача:

Словесной гематрией называется сумма номеров (кодов, числовых значений) входящих в слово букв.
На вход программы поступает список английских слов. На одной строке записано одно слово, количество слов неизвестно.
Для вычисления гематрии поступим следующим образом:

Переведём слово в верхний регистр.
Числовое значение буквы вычислим как КодБуквы - КодБуквыA + 1
Выведите полученные слова в порядке возрастания их гематрии. Если для каких-то слов гематрия совпадает, то их выводите в алфавитном порядке.

Ввод
mother
Daddy
sIster

Вывод
Daddy
mother
sIster

Решение:

import sys

lst = {}
count = 0
for i in sys.stdin:
count = 0
i = i.rstrip()
for j in i:
count += ord(j.upper()) - ord('A') + 1
lst[count] = lst.get(count, []) + [i.rstrip()]
for i in sorted(lst.items(), key=lambda x: (x[0], x[1])):
print(* i[1], sep='\n')

Не проходит именно этот тест

Ввод
bBb
aaaaaa
word

Вывод
aaaaaa
bBb
word

Мой результат:
bBb
aaaaaa
word
0
 Аватар для Aviz__
2736 / 2046 / 506
Регистрация: 17.02.2014
Сообщений: 9,462
08.02.2022, 17:42
Лучший ответ Сообщение было отмечено melisschase как решение

Решение

melisschase,
Python
1
2
3
4
5
6
7
8
9
10
def get_special_cod_of_string(word: str):
    code = 0
    for char in word:
        code += ord(char.upper()) - ord('A') + 1
    return code
 
 
words = ['mother', 'Daddy', 'sIster']
words.sort(key=get_special_cod_of_string)
print(words)
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
08.02.2022, 23:53
Лучший ответ Сообщение было отмечено melisschase как решение

Решение

Цитата Сообщение от Aviz__ Посмотреть сообщение
словари не поддерживают порядок, же.
С некоторых пор (3.6 предварительно, 3.7 официально) dict в Python поддерживает порядок вставки ключей.
Но, естественно, нужно помнить, что код запущенный на версиях Python до 3.6 таким поведением отличаться не будет.
Python
1
2
3
4
5
6
7
8
9
10
>>> words = {'5': 'green', '4': ['pink', 'grey'], '3': 'red'}
>>> words_sorted= {}
>>> for k, v in sorted(words.items(), key=lambda item: item[0]):
    if isinstance(v, list): v.sort()
    words_sorted[k] = v
 
>>> words_sorted
{'3': 'red', '4': ['grey', 'pink'], '5': 'green'}
>>>
>>>
1
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
09.02.2022, 08:05
Лучший ответ Сообщение было отмечено melisschase как решение

Решение

Python
1
2
3
4
words = {'5': 'green', '4': ['pink', 'grey'], '3': 'red'}
val = [ sorted(x) if isinstance(x, list) else x for x in words.values() ]
words = dict( sorted( zip(words.keys(), val) ) )
print( words )
0
 Аватар для Aviz__
2736 / 2046 / 506
Регистрация: 17.02.2014
Сообщений: 9,462
09.02.2022, 08:47
Цитата Сообщение от Garry Galler Посмотреть сообщение
dict в Python поддерживает порядок вставки ключей.
интересно, как же он устроен тогда? и взятие по ключу O(1) сохраняется? нужно почитать глубже.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
09.02.2022, 13:48
Цитата Сообщение от Aviz__ Посмотреть сообщение
и взятие по ключу O(1) сохраняется?
Разработчик dict - Hettinger - утверждает что да.
Но некоторые с этим не согласны....

Цитата Сообщение от Aviz__ Посмотреть сообщение
как же он устроен тогда?
Как обычный hash на открытой адресации. Но там есть хитрая оптимизация побочным следствием которой стало сохранение порядка вставки.

Python
1
2
3
4
5
6
indices =  [None, 1, None, None, None, 0, None, 2]
entries =  [
    [-9092791511155847987, 'timmy', 'red'],
    [-8522787127447073495, 'barry', 'green'],
    [-6480567542315338377, 'guido', 'blue']
]

При итерировании по словарю, .... элементы последовательно возвращаются из entries,
т.к. элементы добавляются каждый раз в конец entries,
то словарь автоматически сохраняет порядок вхождения элементов.

Т.е. хранятся только те записи, которые действительно необходимы, они вынесены из хеш-таблицы в отдельный массив, а в хеш-таблице хранятся только индексы соответствующих записей. Если изначально на массив уходило 192 байт, то сейчас только 80 (3 * 24-байт для каждой записи + 8 байт на indices). Достигнуто сжатие в 58%
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.02.2022, 13:48
Помогаю со студенческими работами здесь

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

Сортировка массива каждым из 3 способов (пузырьковая сортировка, сортировка выбором, сортировка вставкой)
1. Напишите программу, которая выполняет следующие функции: • заполнение элементов массива вещественными числами с заданной ...

Переворот словаря
В бинарном файле был записан словарь: в каждой первой строке – ключ, в каждой второй – значение по этому ключу. Эти бинарные данные...

Создание словаря
Создать словарь товаров. Ключами являются названия товаров, а значениями — их цены. Пользователь вводит количество товаров, которые хочет...

Разбор словаря
Добрый день Есть словарь: {'serv': }]}, {'name': 'test2', 'partitions': 10, 'replicas': 3, 'size': {'tps': 12, 'tpd': 300},...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru