python应该如何遍历字典

字典,dict

字典(dict)结构在python web开发中十分常见,常用于存储json格式的数据。当然python提供了非常方便的json模块,只需一个方法(json.loads(json_obj))就能将json转为dict。不再赘述。

遍历字典

提到遍历,初学者应该最先想起dict内置的一些方法吧,比如keys(), values(), items()。

第一种,内置方法items()
d = {
    'a': {
        'b': 'c'
    },
    'b': 'd',
    'c': 123,
    'd': 543,
    'e': 543,
    'f': 543,
    'g': 543,
    'h': 543
}

for key, value in d.items():
    print("key-value: {}-{}", key, value)
python应该如何遍历字典_第1张图片
output.png

这种方法是最方便的,当然也有很大的局限性,这种遍历方法不能用于嵌套字典。
根本原因在于items()方法,首先我们先看一下items()方法返回了什么?


image.png

可以看到,返回的是一个都是tuple元素的list对象,那么就不难解释了,在tuple中,第一层级的key和value一一对应,分别以(key, value)的形式存储。

如果你想遍历所有的层级,这种方法是行不通的。

第二种,递归

递归预期叫它算法,不如说它是一种思想。首先看一下维基百科上的定义。

递归(英语:Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。递归一词还较常用于描述以自相似方法重复事物的过程。例如,当两面镜子相互之间近似平行时,镜中嵌套的图像是以无限递归的形式出现的。也可以理解为自我复制的过程。

说了一大堆,没怎么听懂?
我认为最重要的一句就是“函数自己调用自己”。

d = {
   'a': {
       'b': {
           'c': 'h',
           'd': {
               'e': 789
           }
       }
   },
   'f': 'g'
}

def print_value_of_dict(dictionary):
   """
   deep first recursive.
   :param dictionary:
   :return:
   """
   for key, value in dictionary.items():
       if isinstance(value, dict):
           print_value_of_dict(value)

       print("deep first: key-value: {}-{}".format(key, value))


print_value_of_dict(d)
python应该如何遍历字典_第2张图片
image.png

这种方式看起来好像是可以遍历每个key-value了。

你可能感兴趣的:(python应该如何遍历字典)