Python:嵌套字典重复值

1 投票
2 回答
809 浏览
提问于 2025-04-17 01:48

我对Python不是很熟悉,所以可能有些东西我没搞明白。如果有人能帮我解决这个问题,那就太好了。 我有一个嵌套字典,结构大致是这样的: 主字典的键是用户ID,然后在这个字典里,特定用户可能给20个不同的产品打过分。 所以这个嵌套字典的键是产品ID,值就是评分。 我从一个文件中读取这些数据:文件的第一列是用户ID,第二列是电影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只能用这些数据结构(不能往列表里添加东西),必须是嵌套字典的形式。 谢谢!

2 个回答

0

你的结构是

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

对吧?

那么你只需要用一下 setdefault() 方法:

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

setdefault 方法会在这个键还不存在的时候,创建一个新的空字典;如果这个键已经存在了,它就会返回你已经拥有的那个字典。

2

在这里,你需要往外面的字典里添加一个新的内部字典,前提是这个内部字典还不存在,对吧?那么你就需要使用 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

撰写回答