python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python数据中key路径拼接

关于python实现json/字典数据中所有key路径拼接组合问题

作者:IT之一小佬

这篇文章主要介绍了关于python实现json/字典数据中所有key路径拼接组合问题,文中有详细的代码说明,需要的朋友可以参考下

案例需求:

        在已知的json数据或者字典数据中,获取所有key值的路径拼接值,并能够根据拼接路径获取对应的值。

示例代码:

import jmespath
 
data = {
    "id": 1,
    "name": '张三',
    "age": 25,
    "grade": {
        "Chinese": 99,
        "Math": 100
    },
    "records": [
        {
            "Chinese": 98,
            "Math": 99
        },
        {
            "Chinese": 97,
            "Math": 97
        }
    ]
}
 
# 方法一:
# 下面写法是最笨的方法,当迭代次数非常多时,要写好多循环,代码量也增加了
my_list = []
for key, value in data.items():
    my_list.append(key)
    if type(value) is dict:
        for key2, value2 in data[key].items():
            my_list.append(key + '.' + key2)
print(my_list)
 
 
# 方法二(递归实现):
def get_keys_path(dict_data, enable_index=None):
    def dfs(dict_data, parent=''):
        if not isinstance(dict_data, dict):
            return
        for key, value in dict_data.items():
            if f"{key}.{value}" not in tmp_list:
                tmp_list.append(f"{parent}.{key}")
            if isinstance(value, dict):
                dfs(value, parent=f"{parent}.{key}")
            elif isinstance(value, list):
                num = 0
                for i in value:
                    if enable_index:
                        dfs(i, parent=f"{parent}.{key}[{num}]")
                        # dfs(i, parent=f"{parent}.{key}.{num}")
                    else:
                        dfs(i, parent=f"{parent}.{key}")
                    num += 1
            else:
                pass
 
    tmp_list = []
    dfs(dict_data, parent='')
    if enable_index:
        return [i[1:] for i in tmp_list]
    else:
        return [i[1:] for i in list(set(tmp_list))]
 
 
# 获取key路径组合
print(get_keys_path(data, 1))
 
# 获取key路径值
print(jmespath.search('records[1].Chinese', data))

运行结果:

到此这篇关于关于python实现json/字典数据中所有key路径拼接组合问题的文章就介绍到这了,更多相关python数据中key路径拼接内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文