Loading [MathJax]/jax/input/TeX/config.js
社区首页 >问答首页 >在python中获取json/字典中的所有键路径组合

在python中获取json/字典中的所有键路径组合
EN

Stack Overflow用户
提问于 2019-03-28 21:25:52
回答 3查看 557关注 0票数 0

我希望能够在JSON文件中获得密钥的所有不同路径。我经常获得大的JSON,并且我不能确切地确定各种数据元素可能在哪里。或者我需要查询数据的各种元素。可视化JSON的树可能很不方便。

基本上,我希望获得所有不同路径的列表,以使未来的各种任务变得更容易。

例如:

代码语言:javascript
代码运行次数:0
复制
myjson = {'transportation':'car',
'address': {'driveway':'yes','home_address':{'state':'TX',
'city':'Houston'}},
 'work_address':{
'state':'TX',
'city':'Sugarland',
 'location':'office-tower',
 'salary':30000}}

如果我可以运行某种类型的循环来获得下面这种格式或某种格式的列表,那就太好了……

myjson‘’address‘

myjson.address myjson.address.driveway myjson.address.home_address myjson.address.home_address.city myjson.address.home_address.state myjson.transportation myjson.work_address myjson.work_address.city myjson.work_address.location myjson.work_address.salary myjson.work_address.state

举个例子,我从

代码语言:javascript
代码运行次数:0
复制
mylist = []

for  key, value in myjson.items():
    mylist.append(key)
    if type(value) is dict:
        for key2, value2 in myjson[key].items():
        mylist.append(key+'.'+key2)
print(mylist)

我猜这有点用,但我不知道如何让它无限期地迭代。例如,如何将其构建为3-10+层深?

EN

回答 3

Stack Overflow用户

发布于 2019-09-29 16:35:18

很棒的片段!

这是一个管理列表的版本:

代码语言:javascript
代码运行次数:0
复制
def get_keys(some_dictionary, parent=None):
    if isinstance(some_dictionary, str):
        return
    for key, value in some_dictionary.items():
        if '{}.{}'.format(parent, key) not in my_list:
            my_list.append('{}.{}'.format(parent, key))
        if isinstance(value, dict):
            get_keys(value, parent='{}.{}'.format(parent, key))
        if isinstance(value, list):
            for v in value:
                get_keys(v, parent='{}.{}'.format(parent, key))
        else:
            pass
票数 1
EN

Stack Overflow用户

发布于 2019-03-28 22:38:11

我认为这应该能满足您的要求:

代码语言:javascript
代码运行次数:0
复制
myjson = {
    'transportation': 'car',
    'address': {
        'driveway': 'yes',
        'home_address': {
            'state': 'TX',
            'city': 'Houston'}
    },
    'work_address': {
        'state': 'TX',
        'city': 'Sugarland',
        'location': 'office-tower',
        'salary': 30000}
}


def get_keys(some_dictionary, parent=None):
    for key, value in some_dictionary.items():
        if '{}.{}'.format(parent, key) not in my_list:
            my_list.append('{}.{}'.format(parent, key))
        if isinstance(value, dict):
            get_keys(value, parent='{}.{}'.format(parent, key))
        else:
            pass


my_list = []
get_keys(myjson, parent='myjson')
print(my_list)

输出:

代码语言:javascript
代码运行次数:0
复制
['myjson.transportation',
'myjson.work_address',
'myjson.work_address.city',
'myjson.work_address.state',
'myjson.work_address.location',
'myjson.work_address.salary',
'myjson.address',
'myjson.address.driveway',
'myjson.address.home_address',
'myjson.address.home_address.city',
'myjson.address.home_address.state']

关键是从函数内部递归地调用get_keys()

票数 0
EN

Stack Overflow用户

发布于 2021-01-12 01:52:32

一种在json中处理列表路径的实现。

代码语言:javascript
代码运行次数:0
复制
import json
def get_json_key_path(jsonStr, enable_index):
    json_keys = []
    jsonObj = json.loads(jsonStr)
    
    def get_key_path(jsonObj, parent=None):
        if not isinstance(json_obj, dict):
            return
        for key, value in jsonObj.items():
            if not isinstance(value, list) and '{}.{}'.format(parent, key) not in json_keys:
                json_keys.append('{}.{}'.format(parent, key))
            if isinstance(value, dict):
                get_key_path(value, parent='{}.{}'.format(parent, key))
            elif isinstance(value, list):
                i = 0
                for obj in value:
                    if enable_index:
                        get_key_path(obj, parent='{}.{}.{}'.format(parent, key, i))
                    else:
                        get_key_path(obj, parent='{}.{}'.format(parent, key))
                    i = i + 1
            else:
                pass

    get_key_path(jsonObj, "")
    return [ s[1:] for s in json_keys]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55407075

复制
相关文章
【Python】字典 dict ① ( 字典定义 | 根据键获取字典中的值 | 定义嵌套字典 )
字典 在 大括号 {} 中定义 , 键 和 值 之间使用 冒号 : 标识 , 键值对 之间 使用逗号 , 隔开 ;
韩曙亮
2023/10/11
2800
在 Target 中获取项目引用的所有依赖(dll/NuGet/Project)的路径
在项目编译成 dll 之前,如何分析项目的所有依赖呢?可以在在项目的 Target 中去收集项目的依赖。
walterlv
2020/02/10
3.5K0
Python 获取字典中的第一个键
将字典的 key 转换成列表,然后取第一个元素 [0]。如果想要最后一个 key 的话,就取最后一个元素 [-1]。
AlwaysBeta
2022/03/09
2.7K0
python找到多个字典中的公共键
python找到多个字典中的公共键 生成字典 from random import randint,sample s = 'abcdefg' s1 = {x:randint(1,4) for x in sample(s,randint(3,6))} s2 = {x:randint(1,4) for x in sample(s,randint(3,6))} s3 = {x:randint(1,4) for x in sample(s,randint(3,6))} 方案1:循环判断 res = [] fo
听城
2018/04/27
4.1K0
使用 Python 从字典键中删除空格
Python是广泛用于数据分析,Web开发,AI的平台,并在自动化的帮助下执行许多不同类型的任务。对我们来说,了解 python 的不同功能很重要。在本文中,我们将了解字典功能以及如何使用 python 删除键之间的空格。此功能主要用于根据需要存储和检索数据,但有时字典的键值之间可能存在空格。当用户希望访问数据时,甚至在要编辑数据的情况下,这会导致错误。
很酷的站长
2023/08/11
3040
使用 Python 从字典键中删除空格
python-获取URL中的json数据
数据源为某系统提供的URL,打开是json文件,python代码获取如下: URL替换成自己的即可。 import urllib.request def get_record(url): resp = urllib.request.urlopen(url) ele_json = json.loads(resp.read()) return ele_json if __name__ == '__main__': print(get_record('http://abc.co/
py3study
2020/01/16
5.5K0
矩阵组合matlab,matlab中矩阵的所有组合[通俗易懂]
X = perms(1:N); % # Permuations of column indices
全栈程序员站长
2022/08/01
1.3K0
在 Python 中解析 JSON 数据
json模块是Python 标准库的一部分,它允许你对 JSON 数据进行编码和解码。
雪梦科技
2020/06/28
17.1K0
获取类路径某个json文件中的内容字符串
实际项目中可能会有需要读取类路径下面的配置文件中的内容的需求,由于springboot项目打包的是jar包,通过文件读取获取流的方式开发的时候没有问题,但是上到linux服务器上就有问题了,对于这个问题记录一下处理的方式
在水一方
2022/09/16
2.6K0
python中的字典
['orange', 'lemon', 'pear', 'banana', 'apple']
py3study
2020/01/13
2.6K0
python 中的 组合
组合是一个面向对象的设计概念,模型a是有关系的。在composition中,一个称为composite的类包含另一个称为component的类的对象。换句话说,一个复合类有另一个类的组件
公众号---人生代码
2020/05/18
6820
​别再用方括号在Python中获取字典的值,试试这个方法
在字典中访问值的传统方法是使用方括号表示法。这种语法将术语的名称嵌套在方括号中,如下所示。
小白学视觉
2022/02/14
3.6K0
python获取当前路径下所有文件
 通过:【import os】来完成: import os path = os.getcwd()#获取当前路径 listDir=os.listdir(path)#获取当前目录下的所有内容 for x in listDir: print(x)  效果如下:
红目香薰
2022/11/28
1.7K0
python中字典的比较
今天碰到一个字典比较的问题,就是比较两个字典的大小,其实这个用的不多,用处也没多少,但是还是记录一下。
py3study
2020/01/08
4.5K0
Python中的字典介绍
前面已经介绍过python数据类型中的字符串、元组和列表,接下来介绍另一种数据类型:字典。
小博测试成长之路
2021/10/13
2.5K0
Python中的字典介绍
python中的有序字典
 字典是python开发中的一种常用的数据结构,但是它在迭代时并不是按照元素的顺序进行,可能在某些场景下无法满足我们的需求,这就引入了有序字典
py3study
2020/01/13
2.4K0
Python中的字典遍历
备忘一下python中的字典如何遍历,没有什么太多技术含量.仅供作为初学者的我参考.
技术小黑屋
2018/09/04
2.6K0
Python中字典的操作
字典的基本详情 字典查找速度快 字典是无序的;(python3.6以上版本有序) 字典支持乘加、成员检查、长度、最小值、最大值、嵌套; 字典值不支持列表、元组、索引、切片、元素赋值跟切片赋值; 字典通过大括号表示; 字典的内容是项;项由键和值组成,中间用冒号隔开;项和项之间用逗号隔开;需要注意键必须是唯一的; 字典的意义是让用户能够快速的找到特定的单词(键),以获悉其定义(值); 字典通过键来进行查看值的内容 字典的值可以是字符串、数字、字典 字典的赋值 dict1 = {'key1':'value1',
py3study
2020/01/17
2.6K0
python中字典的练习
源代码如下: #!/usr/bin/env python #Filename:addressbook.py adbook={'alice':100,'bob':101,'chanel':102} while True:     choice=raw_input("Please input l:list,f:find numuber,e:exit the program: ")     if  choice == 'l':         print "The addressbook is %s" % adb
py3study
2020/01/14
2K0
点击加载更多

相似问题

在python中获取json/字典中的所有键路径组合

323

在字典/json中获取键类型

21

在python中组合字典的键和值

219

在python字典列表中获取某个键的所有值。

53

如何获取嵌套字典列表中的所有键的路径

03
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 大模型知识引擎×DeepSeek实践征文