我有一个词典:
mydict = {1: {3: 'A', 4: 'B'}, 2: {11: {5:'B'}}}
我试图遍历dict,以便能够获取映射到'B'
({5:'B'})
的密钥。
但是这个循环不起作用并且收到错误:
' STR'对象没有属性'键'
for key in mydict.keys():
for subkey in mydict[key].keys():
for sub_subkey in mydict[key][subkey].keys():
print(sub_subkey)
然而,当我手动运行它时,它可以正常工作:
print(mydict[2][11].keys())
我得到5
答案 0 :(得分:0)
例如,当key
为1且subkey
为3时,会出现此错误,因为您尝试为第三个嵌套循环调用mydict[1][3].keys()
,并且字符串{{1没有'A'
方法。
目前还不清楚你要用这些循环完成什么,所以我不确定在你的特定情况下纠正这个问题的最佳方法。 “我正在尝试遍历dict,以便能够获取映射到keys()
”的密钥有点模糊。
答案 1 :(得分:0)
问题在于嵌套字典的级别不同。
mydict
中有两个词典,第一个是字典本身,另一个是词典词典。
所以你的循环基本上是跳到第三级,但当你接受mydict[1]
时,你会收到“浅”字典,里面没有字典,所以调用mydict[1].keys()
就行了,但是去了更深层,如mydict[1][...]
将为您提供元素,而不是字典,因此您无法在其上调用keys()
方法。
如果你想要所有映射到特定值的键,你可以使用一些字典字典的递归搜索:
def recursiveSearch(Dict, Value):
if Dict.__class__ != dict:
return
for key in Dict.keys():
if(Dict[key].__class__ != dict):
if(Dict[key] == Value):
print(str(key) + ' : ' + str(Value))
else:
recursiveSearch(Dict[key], Value)