Python - 通过多维字典循环

sup*_*nic 6 python python-2.7

如果我解释我认为我在做什么,我希望有人可以解释我哪里出错了.

我有以下字典:

ls = [{
    'The Wolf Gift (13)': {
        'cover': 'V:\\Books\\Anne Rice\\The Wolf Gift (13)\\cover.jpg',
        'author': 'Anne Rice',
        'year': '1988'
    },
    'Mummy (14)': {
        'cover': 'V:\\Books\\Anne Rice\\Mummy (14)\\cover.jpg',
        'author': 'Anne Rice',
        'year': '1989'
    },
}]
Run Code Online (Sandbox Code Playgroud)

首先是上面的一个多维字典?我想确保我说的是正确的事情.其次,我如何循环它以检索各个级别的信息.字典是动态填充的,所以我不知道密钥.

我曾尝试for book in ls,然后book['cover']等..但它似乎并没有工作.我需要书名,然后是每本书的附加信息(封面等......).我对python很新.我来自PHP,使用数组是我的面包和黄油,但python正在杀了我....

谢谢

Bry*_*yan 6

如果ls包含多个词典,可以使用她的例子。

for dic in ls:
    for key in dic:
        print 'Book Name: %s' % (key)
        for value in dic[key]:
            print '\t%s: %s' % (value, dic[key][value])
Run Code Online (Sandbox Code Playgroud)

这将产生以下输出:

Book Name: Mummy (14)
    year: 1989
    cover: V:\Books\Anne Rice\Mummy (14)\cover.jpg
    author: Anne Rice
Book Name: The Wolf Gift (13)
    year: 1988
    cover: V:\Books\Anne Rice\The Wolf Gift (13)\cover.jpg
    author: Anne Rice
Run Code Online (Sandbox Code Playgroud)

或者,您可以删除最终的for循环并直接访问键,如下所示:

for dic in ls:
    for key in dic:
        print 'Book Name: %s' % (key)
        print 'Publish Year: %s' % dic[key]['year']
Run Code Online (Sandbox Code Playgroud)

这将给出以下输出:

Book Name: Mummy (14)
Publish Year: 1989
Book Name: The Wolf Gift (13)
Publish Year: 1988
Run Code Online (Sandbox Code Playgroud)


Ash*_*ary 5

这是一个包含单个字典的列表。您可以执行以下操作:

>>> books = ls[0]
>>> for book, details in books.iteritems():
        print book,'-->', details['cover']
...     
Mummy (14) --> V:\Books\Anne Rice\Mummy (14)\cover.jpg
The Wolf Gift (13) --> V:\Books\Anne Rice\The Wolf Gift (13)\cover.jpg
Run Code Online (Sandbox Code Playgroud)