Python嵌套字典列表的递归遍历

问题描述

嵌套字典列表的递归遍历




解决方案

def list_dictionary(d, n_tab=-1):
    if isinstance(d, list):
        for i in d:
            list_dictionary(i, n_tab)
    elif isinstance(d, dict):
        n_tab+=1
        for key, value in d.items():
            print("{}key:{}".format("\t"*n_tab, key))
            list_dictionary(value, n_tab)
    else:
        print("{}{}".format("\t"*n_tab, d))
data = {"info": "成绩单",
        "grades": {
            "Chinese":
                [{"小明": 60}, {"小红": 80}],
            "Math":
                [{"小明": 90}, {"小红": 70}],
            "English":
                [{"小明": 80}, {"小红": 80}],
        }}
list_dictionary(data)

效果

key:info
成绩单
key:grades
	key:Chinese
		key:小明
		60
		key:小红
		80
	key:Math
		key:小明
		90
		key:小红
		70
	key:English
		key:小明
		80
		key:小红
		80

参考文献 1 只能跑嵌套字典,稍微改进了一下




遍历嵌套列表字典并应用函数

def f(x):
    return x + 1


def traverse_list_dict(data, f):
    """遍历嵌套列表字典并应用函数(原数据会被改变)

    :param data: 嵌套列表字典
    :param f: 要应用的函数
    """
    if isinstance(data, list):
        for i, x in enumerate(data):
            data[i] = traverse_list_dict(x, f)
    elif isinstance(data, dict):
        for key, value in data.items():
            data[key] = traverse_list_dict(value, f)
    else:
        data = f(data)
    return data


data = [1, [2, 3], [4, [5, 6]]]
print(traverse_list_dict(data, f))
print(data)

data = {
    'a': 1,
    'b': {'b1': 2, 'b2': 3},
    'c': {'c1': 4, 'c2': [5, 6, {'c21': 7}], 'c3': {'c31': [8, 9]}}
}
print(traverse_list_dict(data, f))
print(data)




参考文献

  1. python嵌套字典的递归遍历
  2. Python函数调用的九大方法,鲜为人知
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XerCis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值