如何迭代嵌套的字典?

时间:2017-05-03 06:45:57

标签: python dictionary

我有一个嵌套的python dictionary数据结构。我想使用without模块读取其键和值collection。数据结构如下所示。

d = {'dict1': {'foo': 1, 'bar': 2}, 'dict2': {'baz': 3, 'quux': 4}}

我试图使用波纹管方式读取字典中的键但是收到错误。

代码

for key, value in d:
    print(Key)

错误

ValueError: too many values to unpack (expected 2)

所以任何人都可以解释错误背后的原因以及如何遍历字典。

8 个答案:

答案 0 :(得分:8)

作为请求的输出,代码就像这样

    d = {'dict1': {'foo': 1, 'bar': 2}, 'dict2': {'baz': 3, 'quux': 4}}

    for k1,v1 in d.iteritems(): # the basic way
        temp = ""   
        temp+=k1
        for k2,v2 in v1.iteritems():
           temp = temp+" "+str(k2)+" "+str(v2)
        print temp

代替iteritems()您也可以使用items(),但iteritems()效率更高,并返回迭代器。

希望这会有所帮助:)

答案 1 :(得分:5)

获取所需的密钥和值dict.items()

for key, value in d.items():
    print(key)

如果您只想要按键:

for key in d:
    print(key)

答案 2 :(得分:5)

迭代嵌套字典:

d = {'dict1': {'foo': 1, 'bar': 2}, 'dict2': {'baz': 3, 'quux': 4}}

for i in d.keys():
    print i
    for j in d[i].keys(): 
          print j 
     

输出:

dict1 
foo
bar

dict2
baz 
quux

其中i迭代主字典键,j迭代嵌套字典键。

答案 3 :(得分:3)

通过字典迭代只能为你提供密钥。

你告诉python期待一堆元组,它试图解包一些不是元组的东西(你的代码设置为期望每个迭代的项目都是(key,value)形式,这不是这种情况(你只是在每次迭代时获得key)。

您还尝试打印Key,这与key不同,这会导致NameError

for key in d:
    print(key)

应该有用。

答案 4 :(得分:3)

以下内容适用于多级嵌套字典:

def get_all_keys(d):
    for key, value in d.items():
        yield key
        if isinstance(value, dict):
            yield from get_all_keys(value)


d = {'dict1': {'foo': 1, 'bar': 2}, 'dict2': {'dict3': {'baz': 3, 'quux': 4}}}
for x in get_all_keys(d):
    print(x)

这会给你:

dict1
foo
bar
dict2
dict3
baz
quux

答案 5 :(得分:2)

您可以按以下方式迭代嵌套字典的所有键和值:

d = {'dict1': {'foo': 1, 'bar': 2}, 'dict2': {'baz': 3, 'quux': 4}}

for i in d:
    for j, k in d[i].items():
        print(j,"->", k)

您的输出看起来像这样-

foo -> 1
bar -> 2
baz -> 3
quux -> 4

答案 6 :(得分:1)

您可以使用[2019-10-29 15:52:15]CURLFile Object ( [name] => uploads/airport.jpg.zip [mime] => zip [postname] => airport.jpg.zip ) (一个benedict子类)和遍历实用工具方法:

安装:dict

pip install python-benedict

文档:https://github.com/fabiocaccamo/python-benedict

答案 7 :(得分:1)

如果给定的字典模式具有单调格式并且已知键,则

dict_ = {'0': {'foo': 1, 'bar': 2}, '1': {'foo': 3, 'bar': 4}}
for key, val in dict_.items():
    if isinstance(val, dict):
        print(val.get('foo'))
        print(val.get('bar'))

在这种情况下,我们可以跳过嵌套循环