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

Сортировка по словарю со списками

22.08.2022, 17:50. Показов 1070. Ответов 4

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

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
community_of_friends = {
    'С.В. Дроздов' : ['П.В. Дроздов', 'И.И. Воробьёв', 'А.С. Синицин', 
                      'Ф.С. Грачёв', 'А.К. Петухов'],
    'П.В. Дроздов' : ['С.В. Дроздов', 'А.С. Голубева', 'М.Л. Гусев'],
    'И.И. Воробьёв' : ['Л.Т. Воронин', 'С.В. Дроздов', 'П.В. Дроздов', 
                     'М.Л. Цаплин'],
    'А.С. Синицин' : ['С.В. Дроздов', 'П.В. Дроздов'],                 
    'Ф.С. Грачёв' : ['С.В. Дроздов', 'П.В. Дроздов', 'А.К. Петухов'],
    'А.С. Сорокина' : ['Л.Т. Воронин'],
    'Л.Т. Воронин' : ['К.К. Чайкин', 'А.С. Уткин']
    }
 
def number_of_friends(friends_base):
    num_friends = []
    for key, value in friends_base.items():
        x = key
        y = []
        y.extend(value)
        z = (x,len(y))
        num_friends.append(z)
    return(num_friends)
 
num_friends = number_of_friends(community_of_friends)
num_friends.sort(key = lambda kol_friends: kol_friends[1], reverse=True)
num_friends
Прошу оценить - может есть другие варианты.
Как-бы работает, но что-то подозрительно ... т.к. получилось методом тыка.
Сортировку по lambda-функции нашёл в сети, но смысл её синтаксиса пока плавает.
(Мне бы пока попроще - без "синтаксического сахара", хотя подобные примеры заставляют здорово покопаться).
И эту часть с lambda-функцией никак не могу обернуть в функцию.

Есть и вторая часть задания:
  • Создайте функцию, определяющую наличие однофамильцев.
  • Создайте функцию, определяющую наличие пользователей с одинаковыми инициалами.
  • Создайте функцию, возвращающую список уникальных пользователей сети в формате Фамилия И.О..
  • Создайте функцию, возвращающую список из уникальных фамилий пользователей сети
Вот тут я просто растерялся - даже не знаю как подступиться.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.08.2022, 17:50
Ответы с готовыми решениями:

Сортировка списка по внутреннему словарю
Здравствуйте! Есть список, состоящий из словарей. Как его отсортировать по значению определенного ключа словаря?

Сортировка со списками
В первой строке написано целое число N - количество записей(1<=N<=200000). В остальных N строках содержатся записи, по одной в строке. Для...

Сортировка выпадающими списками
Я новичок, хочу своими руками реализовать следующее: Есть 10 страниц, к примеру, названные: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ... и...

4
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
22.08.2022, 18:32
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
community_of_friends = {
    'С.В. Дроздов': ['П.В. Дроздов', 'И.И. Воробьёв', 'А.С. Синицин',
                     'Ф.С. Грачёв', 'А.К. Петухов'],
    'П.В. Дроздов': ['С.В. Дроздов', 'А.С. Голубева', 'М.Л. Гусев'],
    'И.И. Воробьёв': ['Л.Т. Воронин', 'С.В. Дроздов', 'П.В. Дроздов',
                      'М.Л. Цаплин'],
    'А.С. Синицин': ['С.В. Дроздов', 'П.В. Дроздов'],
    'Ф.С. Грачёв': ['С.В. Дроздов', 'П.В. Дроздов', 'А.К. Петухов'],
    'А.С. Сорокина': ['Л.Т. Воронин'],
    'Л.Т. Воронин': ['К.К. Чайкин', 'А.С. Уткин']
}
 
 
def amount_friends(user, community_of_friends):
    if user not in community_of_friends:
        return 0
    return len(community_of_friends[user])
 
 
name = input('Введите имя: ')  # П.В. Дроздов
print(amount_friends(name, community_of_friends))
 
print(sorted(community_of_friends, key=lambda x: amount_friends(x, community_of_friends)))
0
0 / 0 / 0
Регистрация: 20.08.2022
Сообщений: 9
22.08.2022, 19:39  [ТС]
Спасибо.
Но как понять вот эту строку ? (Пока однострочный Питон для меня туман).
Цитата Сообщение от Alexarh Посмотреть сообщение
sorted(community_of_friends, key=lambda x: amount_friends(x, community_of_friends))
Как бы разложить по простым составным элементам-примитивам.

Но я не очень пока разбираюсь в однострочном Питоне.
Дайте, пожалуйста, ссылку - где разжевывают подобные примеры однострочного синтаксиса.
Всё попадаются либо совсем примитивы, либо архисложное для меня.
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
22.08.2022, 20:32
Лучший ответ Сообщение было отмечено Victor_M как решение

Решение

Если немного упростить для понимания, то можно сделать так.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
community_of_friends = {
    'С.В. Дроздов': ['П.В. Дроздов', 'И.И. Воробьёв', 'А.С. Синицин',
                     'Ф.С. Грачёв', 'А.К. Петухов'],
    'П.В. Дроздов': ['С.В. Дроздов', 'А.С. Голубева', 'М.Л. Гусев'],
    'И.И. Воробьёв': ['Л.Т. Воронин', 'С.В. Дроздов', 'П.В. Дроздов',
                      'М.Л. Цаплин'],
    'А.С. Синицин': ['С.В. Дроздов', 'П.В. Дроздов'],
    'Ф.С. Грачёв': ['С.В. Дроздов', 'П.В. Дроздов', 'А.К. Петухов'],
    'А.С. Сорокина': ['Л.Т. Воронин'],
    'Л.Т. Воронин': ['К.К. Чайкин', 'А.С. Уткин']
}
 
 
def amount_friends(user):
    if user not in community_of_friends:
        return 0
    return len(community_of_friends[user])
 
 
print(*sorted(list(community_of_friends), key=amount_friends))
Берем список ключей в словаре, нам его надо сортировать.
Python
1
list(community_of_friends)
Далее указываем, по какому параметру будем его сортировать, это key=
Тут, например, можно просто указать len, тогда сортировка будет по длине ключа (длине имени в данном случае)
Python
1
print(*sorted(list(community_of_friends), key=len))
Но нам надо сортировать по нашему какому-то параметру, вот мы тут описываем, как нам этот параметр получить, используя функцию.
Наша функция принимает каждое имя из списка ключей и по этому имени возвращает количество друзей у него и уже по этому параметру идет сравнение.
1
0 / 0 / 0
Регистрация: 20.08.2022
Сообщений: 9
23.08.2022, 22:03  [ТС]
Спасибо, и за разъяснения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.08.2022, 22:03
Помогаю со студенческими работами здесь

Сортировка списка с вложенными списками
Здравствуйте, получаю список с списками такого формата: , , , , , ] Мне нужно отсортировать списки внутри по второму элементу...

сортировка с однонаправленными линейными списками, процедурами и текстовыми файлами
помогите разобраться // не проходит сортировка program linspisok_5; type list = ^elem; elem = record symbol:...

Поиск по словарю
Программа должна: 1. Запрашивать ввод фамилии автора. 2. Если автора в общем перечне нет, то печатать: «Автор не найден!» 3....

Пробить по словарю
Подскажите пожалуйста, как можно подключить какой нибудь маленький словарь(большой уже извращение), я так посчитал видимо все слова...

CamelCase по словарю
Проблема следующая. 1. Есть некий набор строк, состоящих из маленьких латинских букв и цифр. Каждая такая строка представляет собой...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru