【问题标题】:Python: Nested Dictionary duplicate valuesPython:嵌套字典重复值
【发布时间】:2011-09-08 16:34:36
【问题描述】:

我在 python 方面没有那么有经验,所以可能是我遗漏了一些已经存在的东西。但如果有人能帮我解决这个问题,那就太好了。 我有一个嵌套字典,它的形式如下: 主字典有键:userid 然后在这个特定的用户已经评价(也许)20种不同的产品 所以嵌套字典有一个键:product 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 的方式,我必须只使用这些数据结构..(不附加到列表)它必须是一个嵌套字典而已.. 谢谢

【问题讨论】:

  • 您将在创建 innerDict 后立即删除它。 dataDict[userId] 然后将包含一个空字典...

标签: python dictionary nested


【解决方案1】:

只有在外部字典不存在的情况下,您才需要在外部字典中添加一个新的内部字典,对吗?那么你需要使用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

【讨论】:

    【解决方案2】:

    你的结构是

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

    对吗?

    那你只需要setdefault():

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

    setdefault 如果密钥尚不存在,则创建一个新的空字典,否则返回您已经获得的字典。

    【讨论】:

      猜你喜欢
      • 2019-12-04
      • 1970-01-01
      • 2018-06-02
      • 2018-09-19
      • 1970-01-01
      • 2013-08-04
      • 2022-01-17
      • 2018-02-07
      • 2019-06-04
      相关资源
      最近更新 更多