Python 我们可以使用for循环来迭代一个或多个dict吗?
我有一个嵌套的dict和键值dictPython 我们可以使用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':
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循环遍历它们的标准方法是什么?堆栈(深度优先搜索)、队列(广度优先搜索)或使用递归模拟其中任何一种。欢迎使用堆栈溢出!虽然您可能已经解决了该用户的问题,但仅使用代码的答案对将来遇到此问题的用户没有多大帮助。请编辑您的答案,解释您的代码解决原始问题的原因。