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 = [
(0,1), (0,2), (1,2), (1,3), (2,3), (3,4),
(4,5), (5,6), (5,7), (6,8), (7,8), (8,9)
]
for user in users:
user["friends"] = []
for i,j in friendships:
#this works because users[i] is the user whose id is i
users[i]["friends"].append(users[j]) #add i as a friend of j
users[j]["friends"].append(users[i]) #add j as a friend of i
def number_of_friends(user):
"""how many friends does _user_ have?"""
return len(user["friends"])
total_connections = sum(number_of_friends(user) for user in users)
print(total_connections)
#from __future__ import division
#num_users = len(users)
#avg_connections = total_connections / num_users
#create a list (user_id, number_of_friends)
num_friends_by_id = [(user["id"], number_of_friends(user)) for user in users]
sorted_by_num_friends = sorted(num_friends_by_id,
key=lambda (user_id, num_friends): num_friends,
reverse=True)
def friends_of_friend_ids_bad(user):
return [foaf["id"]
for friend in user["friends"]
for foaf in friend["friends"]]