Python提取目标Json键值:包含子嵌套列表和字典

目标:取json中所有的Name、Age字典

思路:递归处理字典中直接包含子字典的情况,

import json


def find_targ_dicts(data,key1,key2):
    result = {}
    if isinstance(data, dict):
        if key1 in data and key2 in data: # 第一层字典中包含key1和key2
            result[key1] = data[key1]
            result[key2] = data[key2]
            yield result
        for k, v in data.items():
            yield from find_targ_dicts(v, key1, key2) # 递归处理子字典
    elif isinstance(data, list):
        for item in data:
            yield from find_targ_dicts(item, key1, key2)


# 示例JSON数据
json_data = '''
{
    "name": "mkdm",
    "age": 30,
    "children": [
        {
            "name": "Ace",
            "age": 10
        },
        {
            "name": "Bob",
            "age": 8
        },
        {
            "tt":{"name": "coh",
            "age": 9}
        }
    ],
    "address": {
        "city": "shbj",
        "addr": "sccd"
    }
}
'''

# 将JSON字符串转换为Python对象
data = json.loads(json_data)

# 提取所有的字典
dicts = list(find_targ_dicts(data,'name','age'))
print(dicts)
# 打印所有的字典
for d in dicts:
    print(d)

结果截图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值