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

Более чем за пол-дня выродил вот такое:

 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-функцией никак не могу обернуть в функцию.

Есть и вторая часть задания:
  • Создайте функцию, определяющую наличие однофамильцев.
  • Создайте функцию, определяющую наличие пользователей с одинаковыми инициалами.
  • Создайте функцию, возвращающую список уникальных пользователей сети в формате Фамилия И.О..
  • Создайте функцию, возвращающую список из уникальных фамилий пользователей сети

Вот тут я просто растерялся - даже не знаю как подступиться.
Rodegast
 In [1]: community_of_friends = {
...:     'С.В. Дроздов' : ['П.В. Дроздов', 'И.И. Воробьёв', 'А.С. Синицин',
...:                       'Ф.С. Грачёв', 'А.К. Петухов'],
...:     'П.В. Дроздов' : ['С.В. Дроздов', 'А.С. Голубева', 'М.Л. Гусев'],
...:     'И.И. Воробьёв' : ['Л.Т. Воронин', 'С.В. Дроздов', 'П.В. Дроздов',
...:                      'М.Л. Цаплин'],
...:     'А.С. Синицин' : ['С.В. Дроздов', 'П.В. Дроздов'],
...:     'Ф.С. Грачёв' : ['С.В. Дроздов', 'П.В. Дроздов', 'А.К. Петухов'],
...:     'А.С. Сорокина' : ['Л.Т. Воронин'],
...:     'Л.Т. Воронин' : ['К.К. Чайкин', 'А.С. Уткин']
...:     }
In [2]: s = { k:len(v) for k,v in community_of_friends.items() }
In [3]: s
Out[3]:
{'С.В. Дроздов': 5,
'П.В. Дроздов': 3,
'И.И. Воробьёв': 4,
'А.С. Синицин': 2,
'Ф.С. Грачёв': 3,
'А.С. Сорокина': 1,
'Л.Т. Воронин': 2}
In [4]: sorted(s, key=lambda x: s[x])
Out[4]:
['А.С. Сорокина',
'А.С. Синицин',
'Л.Т. Воронин',
'П.В. Дроздов',
'Ф.С. Грачёв',
'И.И. Воробьёв',
'С.В. Дроздов']
Victor_M
Спасибо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB