Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我们可以使用for循环来迭代一个或多个dict吗?_Python_Python 3.x_Dictionary - Fatal编程技术网

Python 我们可以使用for循环来迭代一个或多个dict吗?

Python 我们可以使用for循环来迭代一个或多个dict吗?,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我有一个嵌套的dict和键值dict 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':

我有一个嵌套的dict和键值dict

 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;我第一次把它复制粘贴错了。

一般来说,没有。dict可以是任意递归的深度,除了使用
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

您可以使用递归深入给定的字典并打印键及其值

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

for i in somedict
是循环字典中的所有键。 请参阅中的更多详细信息

在字典中循环时,键和相应的值可以 同时使用
items()
方法检索

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

for k,v in dicta['key2'].items():
    if isinstance(v,dict):
        for k1,v1 in v.items():
            print(v1)
isinstance(v,dict)
如果对象参数是
dict
参数的实例,则返回true,因此不需要捕获异常

看看


希望这能有所帮助。

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

for k in n:
    v = n.get(k)
    if isinstance(v, dict):
    for j in v:
        print(v.get(j))
for k,v in dicta.items():
     if k=="key2":
         new_dict=v
         for k1, v1 in new_dict.items():
               print v1["keyc"]

看起来你不应该在这里迭代。您可能只需要
dicta['key2']['key3']
。不使用for循环遍历它们的标准方法是什么?堆栈(深度优先搜索)、队列(广度优先搜索)或使用递归模拟其中任何一种。欢迎使用堆栈溢出!虽然您可能已经解决了该用户的问题,但仅使用代码的答案对将来遇到此问题的用户没有多大帮助。请编辑您的答案,解释您的代码解决原始问题的原因。