Python: вложенные словарь повторяющиеся значения

1

Я не настолько опытен в python, так что может случиться так, что мне не хватает чего-то, что уже есть. Но было бы здорово, если бы кто-нибудь помог мне разобраться в этом. У меня есть вложенный словарь, который имеет следующий вид: Основной словарь имеет ключ: userid, тогда в этом конкретный пользователь оценил (может быть) 20 разных продуктов. Так что вложенный словарь имеет ключ: идентификатор продукта и значение - это рейтинг, который я читая их из файла: где первое слово - идентификатор пользователя, второе слово - id фильма, а третье слово - рейтинг

dataDict={}
innerDict = {}
for line in myFile:
        words = line.strip().split()
        userId = words[0]
        movieId = words[1]
        rating = words[2]
        innerDict[movieId] = rating
        dataDict[userId] = (innerDict)
        innerDict = {}

Но, очевидно, строка innerDict [userId] = innerDict создаст новую (вместо добавления ее к последней). Как я написал API, мне нужно работать только с этими структурами данных (без добавления в список) он должен быть только вложенным словарем.. Спасибо

  • 0
    Вы innerDict сразу после его создания. dataDict[userId] будет тогда содержать пустой дикт ...
Теги:
dictionary
nested

2 ответа

2
Лучший ответ

Здесь вам нужно добавить новый внутренний dict во внешний dict, только если он еще не существует, верно? Затем вам нужно использовать setdefault:

dataDict={}
for line in myFile:
        words = line.strip().split()
        userId = words[0]
        movieId = words[1]
        rating = words[2]
        innerDict = dataDict.setdefault(userId, {})
        innerDict[movieId] = rating
0

Ваша структура

datadict = {"user1": {"Gladiator": 9, "Ghost": 2, "Jurassic Park": 8},
            "user2": {"E.T.": 0, "300": 10}
           }

Правильно?

Тогда вам просто нужно setdefault():

datadict.setdefault(userId, {})[movieId] = rating

setdefault создает новый пустой dict, если ключ еще не существует, в противном случае возвращает dict, который у вас уже есть.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню