Я не настолько опытен в 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, мне нужно работать только с этими структурами данных (без добавления в список) он должен быть только вложенным словарем.. Спасибо
Здесь вам нужно добавить новый внутренний 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
Ваша структура
datadict = {"user1": {"Gladiator": 9, "Ghost": 2, "Jurassic Park": 8},
"user2": {"E.T.": 0, "300": 10}
}
Правильно?
Тогда вам просто нужно setdefault()
:
datadict.setdefault(userId, {})[movieId] = rating
setdefault
создает новый пустой dict, если ключ еще не существует, в противном случае возвращает dict, который у вас уже есть.
innerDict
сразу после его создания.dataDict[userId]
будет тогда содержать пустой дикт ...