You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
1.7 KiB
Python

from typing import List, Dict, Tuple
USERS = [
{"id": 0, "name": "Hero"},
{"id": 1, "name": "Dunn"},
{"id": 2, "name": "Sue"},
{"id": 3, "name": "Chi"},
{"id": 4, "name": "Thor"},
{"id": 5, "name": "Clive"},
{"id": 6, "name": "Hicks"},
{"id": 7, "name": "Devin"},
{"id": 8, "name": "Kate"},
{"id": 9, "name": "Klein"},
]
FRIENDSHIPS = [
6 years ago
(0, 1),
(0, 2),
(1, 2),
(1, 3),
(2, 3),
(3, 4),
(4, 5),
(5, 6),
(5, 7),
(6, 8),
(7, 8),
(8, 9),
]
6 years ago
def add_friendships(
users: List[Dict], friendships: List[Tuple[int, int]]
) -> List[Dict]:
for user in users:
6 years ago
user["friends"] = []
for i, j in friendships:
users[i]["friends"].append(users[j]) # add j as friend of i
users[j]["friends"].append(users[i]) # add j as friend of i
return users
def number_of_friends(user: Dict) -> int:
return len(user["friends"])
def friend_counts(users: List[Dict]) -> List[Tuple[int, int]]:
"""Returns a sorted list by number of friends"""
6 years ago
number_of_friends_by_id = [(user["id"], number_of_friends(user)) for user in users]
6 years ago
_sorted_list = sorted(number_of_friends_by_id, key=lambda tup: tup[1], reverse=True)
return _sorted_list
if __name__ == "__main__":
users = add_friendships(USERS, FRIENDSHIPS)
total_connections = sum(number_of_friends(user) for user in users)
num_users = len(users)
avg_connections = total_connections / num_users
counts = friend_counts(users)
print(f"Total user count: {num_users}")
print(f"Total number of connections: {total_connections}")
print(f"Average connections: {avg_connections}")
print(counts)