我正试图在字典中增加价值。
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] },
...
}
答案 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'}]
的事情。
我希望这会有所帮助!