Ошибка чтения словаря Python при использовании операторов индекса - PullRequest
0 голосов
/ 24 августа 2018

Изначально я пытался прочитать свой набор данных в словарь

with open("msong.csv") as f:
reader = csv.DictReader(f)
data = [r for r in reader]

словарь содержит данные примерно так:

[{'': '0',
  'artist_name': 'Jack Johnson',
  'listen_count': '1',
  'release': 'Thicker Than Water',
  'song_id': 'SOAKIMP12A8C130995',
  'title': 'The Cove',
  'user_id': 'b80344d063b5ccb3212f76538f3d9e43d87dca9e',
  'year': '0'},
 {'': '1',
  'artist_name': 'Paco De Lucia',
  'listen_count': '2',
  'release': 'Flamenco Para Ni\xc3\xb1os',
  'song_id': 'SOBBMDR12A8C13253B',
  'title': 'Entre Dos Aguas',
  'user_id': 'b80344d063b5ccb3212f76538f3d9e43d87dca9e',
  'year': '1976'},

Я использую функцию, чтобы рекомендовать песни на основе вкусов пользователя


def recommend(person, bound, similarity=pearson_similarity):
    scores = [(similarity(person, other), other) for other in data if other != person]

    scores.sort()
    scores.reverse()
    scores = scores[0:bound]

    print (scores)

    recomms = {}

    for sim, other in scores:
        ranked = data[other]

        for itm in ranked:
            if itm not in data[person]:
                weight = sim * ranked[itm]

                if itm in recomms:
                    s, weights = recomms[itm]
                    recomms[itm] = (s + sim, weights + [weight])
                else:
                    recomms[itm] = (sim, [weight])

    for r in recomms:
        sim, item = recomms[r]
        recomms[r] = sum(item) / sim

    return recomms

При вводе я получаю сообщение об ошибке

recommend(data[0][user_id],4,euclidean_similarity)

ошибка: ВЫГОДНО (данные [0] [user_id], 4, euclidean_similarity)

1 Ответ

0 голосов
/ 24 августа 2018

data[0][user_id]

Вместо использования строки 'user_id' в качестве ключа вы используете переменную user_id, которая, вероятно, не установлена, если я правильно понял ваше намерение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...