在python的嵌套字典中增加价值

时间:2019-04-30 18:16:13

标签: python

我正试图在字典中增加价值。

aDict = { "id" :
             {"name": None },
          "id2" :
             {"foo": None}, 
           ...
         }

for k, v in aDict.items():
     temp = [1,2,3,4]
     aDict[k][v] = temp

然后我遇到了错误,TypeError: unhashable type: 'dict' 如何在嵌套字典中增加价值?



---编辑---
我的预期输出是

aDict = { "id" :
             {"name": [1,2,3,4] },
          "id2" :
             {"foo": [1,2,3,4] }, 
           ...
         }

5 个答案:

答案 0 :(得分:2)

当您执行aDict [k]时,您已经获得了dict值,然后将temp分配给dict的特定键。

    aDict = { 'id' :
             {'name': None },
             'id2':
             {'foo':None}
            }

for k, v in aDict.items():
    temp = [1,2,3,4]
    for keys in v.keys():
        aDict[k][keys] = temp

输出

{'id': {'name': [1, 2, 3, 4]}, 'id2': {'foo': [1, 2, 3, 4]}}

答案 1 :(得分:2)

对于任何任意词典的字典(无论字典有多深),它都可以工作:

def go_deeper(aDict):
    for k, v in aDict.items():
         if v is None:            
             aDict[k] = temp
         else:
             go_deeper(v)
    return aDict

用法

>>> temp = [1,2,3,4]     
>>> go_deeper(aDict)

例如,输入:

aDict = { 'id' :
             {'name': None },
         "id2" :
             {"foo": 
                {'bar': None }
             }
         }

上面的代码返回:

{'id': {'name': [1, 2, 3, 4]}, 'id2': {'foo': {'bar': [1, 2, 3, 4]}}}

答案 2 :(得分:1)

尝试一下:

temp = [1,2,3,4]
for k in aDict:
    for j in aDict[k]:
        aDict[k][j]=temp

输出

{'id': {'name': [1, 2, 3, 4]}, 'id2': {'foo': [1, 2, 3, 4]}}

答案 3 :(得分:1)

您可以使用d.keys()获取所有密钥,然后将temp添加到此字典中。

aDict = { "id" :
             {"name": None },
          "id2" :
             {"foo": None}, 
          "id3" :
             {"bar": None, "boo": None}, 
         }
temp = [1, 2, 3, 4]

for k, v in aDict.items():
    for newKey in v.keys():
        v[newKey] = temp

结果:

{'id': {'name': [1, 2, 3, 4]},
 'id2': {'foo': [1, 2, 3, 4]},
 'id3': {'bar': [1, 2, 3, 4], 'boo': [1, 2, 3, 4]}}

答案 4 :(得分:0)

我会避免使用嵌套循环。因此,为了获得所需的输出,我将执行以下操作:

aDict = { "id" :
             {"name": None },
          "id2" :
             {"foo": None}
         }

for value in aDict.values():
     temp = [1,2,3,4]
     # obtain the key of inner dictionary
     # this line could be written even better, if you're concerned about memory!
     key = list(value.keys())[0]
     # update the inner value
     value[key] = temp

当我运行它时,它会提供您想要的输出

user@Kareems-MBP:Desktop$ python aDict.py 
{'id': {'name': [1, 2, 3, 4]}, 'id2': {'foo': [1, 2, 3, 4]}}

最后,您收到TypeError: unhashable type: 'dict'的TypeError是因为您正尝试使用字典使用字典引用字典中的项目。字典中的项目只能使用其键来引用。例如。如果我们有以下字典:

myDict = {
'firstname': 'John',
'lastname': 'White'
}

,我们想引用第一项,我们只能使用myDict['firstname']来做到,即使使用索引myDict[0],我们也不能做到这一点。您可以想象自己正在做类似myDict[{'firstname': 'John'}]的事情。

我希望这会有所帮助!