Python3 - 我们可以使用for循环来迭代dicts的dict吗?

时间:2017-02-12 05:12:16

标签: python dictionary

我有一个嵌套dicts和键值的字典。

 dicta = {'key1': {'keya': 'a', 'keyb': 'b'},
      'key2': {'key3':{'keyc': 'c'}}, 'key4': 4}}

有没有办法可以使用for循环来获取'c'?

我试过了,

print(dicta['key2'])

for x in dicta['key2']:
    for y in x['key3']:
        print(y)

对于第一次印刷,我得到了

{'key3': {'keyc': 'c'}}

但是我得到TypeError:字符串索引必须是第二次打印的整数。

提前致谢! *我编辑用dicta替换n;我第一次复制并粘贴了它。

5 个答案:

答案 0 :(得分:1)

一般来说,没有。 Dicts可以任意递归深度,除了for循环之外没有其他方法可以遍历它们。 (您可以使用列表实现自己的堆栈并模拟递归,但这不是“好”。)

this question.中有一些用于遍历字典(计算深度)的递归代码

具体而言,确定。事先了解结构,您可以使用正确数量的for循环:

n = {'key1': {'keya': 'a', 'keyb': 'b'},
     'key2': {'key3':{'keyc': 'c'}}, 'key4': 4}

for k1,v1 in n.items():
    try:
        for k2,v2 in v1.items():
            try:
                for k3,v3 in v2.items():
                    print(v3)
            except AttributeError:
                pass
    except AttributeError:
        pass

答案 1 :(得分:1)

for i in somedict用于循环字典中的所有键。 查看dict views

的更多详情
  

循环遍历词典时,键和相应的值可以   使用items()方法同时检索。

items()返回字典项((键,值)对的新视图)。 所以你可以试试这个:

for k,v in dicta['key2'].items():
    if isinstance(v,dict):
        for k1,v1 in v.items():
            print(v1)

isinstance(v,dict)如果object参数是dict参数的实例,则返回true,因此您不需要捕获异常。

查看looping-techniques

希望这有帮助。

答案 2 :(得分:0)

您可以使用递归来深入到给定字典并打印密钥及其值。

def drill(dicta):
  for k in dicta.keys():
    if isinstance(dicta[k],dict):
      drill(dicta[k])
    else:
      print ('dicta[',k,']=',dicta[k])
  return

答案 3 :(得分:0)

for k in n:
    v = n.get(k)
    if isinstance(v, dict):
    for j in v:
        print(v.get(j))

答案 4 :(得分:0)

使用嵌套循环可以获得所需的结果。

for k,v in dicta.items():
     if k=="key2":
         new_dict=v
         for k1, v1 in new_dict.items():
               print v1["keyc"]
相关问题