Python: вложенные словарь повторяющиеся значения - PullRequest
1 голос
/ 08 сентября 2011

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

.
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 я должен работать только с этими структурами данных ... (без добавления в список) это должен быть только вложенный словарь .. Спасибо

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011

Здесь вам нужно добавить новый внутренний диктант к внешнему, только если он еще не существует, верно? Тогда вам нужно использовать 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 голосов
/ 08 сентября 2011

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

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

Правильно?

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

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

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

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