joelgrus / data-science-from-scratch

code for Data Science From Scratch book
MIT License
8.63k stars 4.5k forks source link

function calls mismatched dict names #8

Open iphyer opened 9 years ago

iphyer commented 9 years ago

I have been reproduced your code and it failed here and I find that the code below is mismatched in dict names

from collections import defaultdict

# keys are interests, values are lists of user_ids with that interest
user_ids_by_interest = defaultdict(list)

for user_id, interest in interests:
    user_ids_by_interest[interest].append(user_id)

# keys are user_ids, values are lists of interests for that user_id
interests_by_user_id = defaultdict(list)

for user_id, interest in interests:
    interests_by_user_id[user_id].append(interest)

def most_common_interests_with(user_id):
    return Counter(interested_user_id
        for interest in interests_by_user["user_id"]   
        for interested_user_id in users_by_interest[interest]
        if interested_user_id != user_id)

Generally, the problem happens in function most_common_interests_with(user_id) and when most_common_interests_with(user_id) calls dict above it shoulbe be user_ids_by_interest not users_by_interest and interests_by_user_id not interests_by_user.

But even if I have rewritten the code the code above produce no results

iphyer commented 9 years ago

The output is like this:

most_common_interests_with(1)
Out[88]: Counter()

Which is quit strange!

iphyer commented 9 years ago

Indeed, the right code should be the following format:

def most_common_interests_with(user_id):
    return Counter(interested_user_id
        for interest in interests_by_user_id[user_id]   
        for interested_user_id in user_ids_by_interest[interest]
        if interested_user_id != user_id)