Python:遍历字典中的嵌套字典

4

我有一个测试字典:

addressBook = {'a' : {'Name' : 'b', 'Address' : 'c', 'PhoneNo' : '5'}, 'd' : {'Name' : 'e', 'Address' : 'f', 'PhoneNo' : '7'}}

我希望能够遍历addressBook中的每个字典,并显示每个值(姓名、地址和电话号码)。
我尝试了以下代码:
for x in addressBook:
    for y in x:
        print(y, "\t", end = " ")

然而,这只会打印出每个字典的键(即'a'和'b')。

我该如何显示所有的值?


1
你真的需要把addressBook设为字典吗?一个地址列表不是也能胜任吗?addressBook的键对你有什么信息呢? - this.myself
4个回答

3

每当你在Python中遍历一个字典时,默认情况下它只会遍历字典中的键。

如果你想要遍历字典中的值,你需要使用itervalues方法,或者使用iteritems方法来遍历存储在字典中的(key, value)对。

尝试使用以下代码:

for x in addressBook.itervalues():
    for key, value in x.iteritems():
        print((key, value), "\t", end = " ")

使用itervalues()相比于values()有什么优势吗? - SuperBiasedMan
3
在Python 2.x中,values函数返回一个急切求值的值列表,而itervalues函数返回一个迭代器,该迭代器按需提供值。在Python 3中,iter*函数已被移除,items、values和keys函数返回字典视图 - Noufal Ibrahim

3
我会这样做。
for k1,d in addressBook.items:
   for k2,v2 in d.items:
      print("{} :: {}".format(k2, v2))

然而,如果你只想将字典打印得整洁一些,我建议使用以下方法。
   import pprint
   s = pprint.pformat(addressBook)
   print(s)

1

在遍历字典时,只会得到字典的键而不是值。如果你只想获取值,则可以使用以下方法:

for x in addressBook.values()

如果您想要键和值,可以使用iteritems()方法,如下:

for key,value in addressBook.iteritems():
        print key, value

1

你的代码有问题:

for x in addressBook:  # x is key from the addressBook dictionary.
    #- x is key and type of x is string. 
    for y in x:       # Now we iterate every character from the string.
        print(y, "\t", end = " ")  # y character is print

请尝试以下操作:
for i in addressBook:
    print "Name:%s\tAddress:%s\tPhone:%s"%(addressBook[i]["Name"], addressBook[i]["Address"], addressBook[i]["PhoneNo"])


Name:b  Address:c   Phone:5
Name:e  Address:f   Phone:7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接