关于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路径拼接内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python中字典列表中删除重复项

    要从字典列表中删除重复项: 使用字典推导来遍历列表. 使用每个 id 属性的值作为键,使用字典作为值. 使用 dict.values() 方法只获取唯一的字典. 使用 list() 类将结果转换为列表. list_of_dictionaries = [ {'id': 1, 'site': 'jiyik.com'}, {'id': 2, 'site': 'google.com'}, {'id': 1, 'site': 'jiyik.com'}, ] result = list( { diction

  • python中的字典及嵌套遍历

    目录 python字典及嵌套遍历 访问字典里的值 修改字典 删除字典元素 嵌套字典遍历与内置函数 字典的常用方法(定义.新增.删除.更新.遍历.嵌套等) 什么是字典? 为什么需要字典? 字典 总结 python字典及嵌套遍历 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 dict1={'apple':23,'banana':34,'cherry':6} dict2={'ja

  • Python查找不限层级Json数据中某个key或者value的路径方式

    最近项目中有一个小需求,查找json文件中某个key或者value的路径,所以就写了一个简单的小脚本,比较粗糙. #!/usr/bin/env python3 # -*- coding:utf-8 -*- ''' @author: funcups ''' from logzero import logger import ast class HandleJson(): def __init__(self, data): if data == None: logger.error('请输入json

  • python 列表套json字典根据相同的key筛选数据

    前言: 工作中遇到以下小问题,解决方法如下,可能比较暴力,暂时留档,再进行优化. 要求:将列表中json的 ‘id’ 字段值相同的数据,根据 type的值,按照一定的优先级次序排列,列表中仅保留优先级最高的type. 测试用例: list1 示例数据: type优先级列表:[6, 4, 2, 5, 8, 3, 7, 1] (依次递减,6优先级最高,1优先级最低) draw_data  = [         {'geometry':{"coordinates":[121.8763583

  • Python读取Json字典写入Excel表格的方法

    需求: 因需要将一json文件中大量的信息填入一固定格式的Excel表格,单纯的复制粘贴肯定也能完成,但是想偷懒一下,于是借助Python解决问题. 环境: Windows7 +Python2.7 +Xlwt 具体分析: 原始文件为json列表,列表中有多个字典,生成Excel文件需要将列表中的字典的键值按键对应排列,也就是说,所有为"XX"的键对应的值写在一列,且每个字典中的不同键的键值保证在同一行. 解决思路是,读取json文件,然后遍历字典的键和值,读完第一个字典并写入Excel

  • python数据封装json格式数据

    最简单的使用方法是: >>> import simplejson as json >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) '["foo", {"bar": ["baz", null, 1.0, 2]}]' >>> print(json.dumps("\"foo\bar")) "\&q

  • python向json中追加数据的两种方法总结

    目录 前言 1. list dump (不推荐) 2. json update (推荐使用) 总结 前言 json以其轻量级的数据交换格式,且易于阅读和编写而使用率很广泛,而使用json的过程中时而需要增加字段,本人验证两种方式之后将其集成梳理. 具体操作详情如下: 1. list dump (不推荐) 采用list方式,向json中添加字段.此法存在一定的问题,不推荐使用. 方法如下: (1)先创建一个列表: json_content = [] (2)将当前json文件中已有的内容读入列表中:

  • python与json数据的交互详情

    目录 一 什么是json 二 json语法格式 三 python与json的交互 1. json.loads() 2. json.load() 3. json.dumps() 4. json.dump() 一 什么是json json是一种独立于编程语言和平台的轻量级数据交换方式.和xml一样,只是一种数据交换方式,与编程语言没有依赖关系.各种支持json数据格式的编程语言,都会有对其进行解析的方法.xml和json都用于数据存储和数据交换,但是现在json越来越流行,用的比xml多.json较

  • Python基础之字典的详细使用教程

    目录 一. 什么是字典 二. 创建字典 三. 字典元素获取 四. 字典元素的增删改操作 五. 字典的视图操作 一. 什么是字典 字典作为Python的一个内置数据结构,和列表一样都是可变序列的,但是它是无序的,以键值对的方式存储数据. 二. 创建字典 创建字典的两种方式,一种使用{ } 另一种使用内置函数dict() # author: 爪哇斗罗(javaDouLuo) # date: 2022/7/11 22:51 # 字典的创建 dict01={"A": 1, "B&qu

  • python使用json序列化datetime类型实例解析

    使用python的json模块序列化时间或者其他不支持的类型时会抛异常,例如下面的代码: # -*- coding: cp936 -*- from datetime import datetime import json if __name__=='__main__': now = datetime.now() json.dumps({'now':now}) 运行会出现下面的错误信息: Traceback (most recent call last): File "C:\Users\xx\De

  • python将类似json的数据存储到MySQL中的实例

    由于之前对于爬取下来的数据都是存入MongoDB中,想起来还没有尝试存入MySQL,于是将一篇简单的文章爬取下来,存入MySQL试试 这里用到的python模块是pymysql,因为MySQLdb之前已经停止维护 首先在cmd中连接MySQL并且创建一个数据库json 在图形化界面workbench中可以看到 接下来就要在pycharm中写代码了,在pycharm中导入pymysql后即可 #建立python与MySQL之间的连接 mysql = pymysql.connect(host="lo

  • 浅谈Python中的异常和JSON读写数据的实现

    异常可以防止出现一些不友好的信息返回给用户,有助于提升程序的可用性,在java中通过try ... catch ... finally来处理异常,在Python中通过try ... except ... else来处理异常 一.以ZeroDivisionError为例,处理分母为0的除法异常 def division(numerator,denominator): result=numerator/denominator return result ret1=division(1,5) prin

随机推荐