为什么我不能遍历嵌套键?

时间:2017-11-23 06:27:08

标签: python loops

我有一个词典: 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

2 个答案:

答案 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)