我有一个嵌套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;我第一次复制并粘贴了它。
答案 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,因此您不需要捕获异常。
希望这有帮助。
答案 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"]