我有一个json文件需要更新。我将它转换为python dict(嵌套)来更新它。这是输入,但可以是任何部门。我相信有更好的方法来做这件事,但不知道。在

最后通牒除了更新之外,我还想执行创建/删除操作。在

这是脚本和输入文件# Now find TARGET value in nested key value chain

# Replace old value with NEWVALUE

import json

from pprint import pprint

d1 = open('jinputstack.json', 'r')

d1 = json.load(d1)

def traverse(obj, path=None, callback=None):

"""

Traverse Python object structure, calling a callback function for every element in the structure,

and inserting the return value of the callback as the new value.

"""

if path is None:

path = []

if isinstance(obj, dict):

value = {k: traverse(v, path + [k], callback)

for k, v in obj.items()}

elif isinstance(obj, list):

value = [traverse(elem, path + [[]], callback)

for elem in obj]

else:

value = obj

if callback is None:

# print("Starting value Found-----------------------------------------------------")

print(value)

return value

else:

print(path, value)

return callback(path, value)

def traverse_modify(obj, target_path, action):

"""

Traverses any arbitrary object structure and performs the given action on the value,

replacing the node with the

action's return value.

"""

target_path = to_path(target_path)

pprint(value)

pprint(target_path)

def transformer(path, value):

if path == target_path:

print(action)

d2 = data["groups"][0]["properties"][1]["value"]["data"][2]["object"]["name"].update(action)

return d2

else:

return value

return traverse(obj, callback=transformer)

def to_path(path):

"""

Helper function, converting path strings into path lists.

>>> to_path('foo')

['foo']

>>> to_path('foo.bar')

['foo', 'bar']

>>> to_path('foo.bar[]')

['foo', 'bar', []]

"""

if isinstance(path, list):

return path # already in list format

def _iter_path(path):

#pprint(path.split)

for parts in path.split('[]'):

for part in parts.strip('.').split('.'):

yield part

yield []

return list(_iter_path(path))[:-1]

def updateit(newvalue):

data["groups"][0]["properties"][1]["value"]["data"][2]["object"]["name"] = newvalue

print(data["groups"][0]["properties"][1]["value"]["data"][2]["object"]["name"])

return data["groups"][0]["properties"][1]["value"]["data"][2]["object"]["name"]

traverse_modify(d1, d1["groups"][0]["properties"][1]["value"]["data"][1]["object"]["name"], updateit("XXXXXXXXXXXXXX"))

json_data = json.dumps(data)

f = open("jinputstack.json","w")

f.write(json_data)

f.close()

^{pr2}$

作者:文森特·德里森

python 嵌套字典key_查找和修改python嵌套字典(key,value)相关推荐

  1. python中属性赋值查找_关于python:在dataframe列中查找字典的值并进行修改

    我现在处理DataFrames和Dictionaries,我有一个问题, 我有一个词典"水果" {BN:'Banana', LM:'Lemon', AP:'Apple' ..... ...

  2. python设置路径_Python探索之修改Python搜索路径

    当Python执行import语句时,它会在一些路径中搜索Python模块和扩展模块.可以通过sys.path查看这些路径,比如: >>> import sys >>&g ...

  3. python基础代码大全-【01】Python基础入门 (全)

    一.字符串 1. 字符串切片 切片: name="abcdef" name[2:5]="cde" 跳取: name="abcdef" nam ...

  4. python black_如何使用Black自动格式化Python代码

    python black Writing Python code is one thing and writing the code in a good format is another thing ...

  5. 12.从入门到精通:Python字典,创建字典,访问字典的值,修改字典,删除字典,字典键的特性,字典内置函数和方法

    12.从入门到精通:Python字典,创建字典,访问字典的值,修改字典,删除字典,字典键的特性,字典内置函数和方法 Python字典 创建空字典 访问字典里的值 修改字典 删除字典元素 字典键的特性 ...

  6. python字符串用法详解(str、下标、切片、查找、修改、判断)

    1. 认识字符串 字符串是 Python 中最常⽤的数据类型.⼀般使⽤引号来创建字符串.创建字符串很简单,只要为变量分配⼀个值即可. a = 'hello world' b = "abcde ...

  7. python英语字典程序修改_详解如何修改python中字典的键和值

    我们知道python中字典是无序的,它们都是通过hash去对应的.一般的如果我们需要修改字典的值,只需要直接覆盖即可,而修改字典的键,则需要使用字典自带的pop函数,示例如下: t = {} t['a ...

  8. python修改列表中字典内的值_python修改字典内key对应值的方法

    python学习笔记:字典 python版本:Python 2.6.6 系统环境:CentOS release 6.2 x86_64 本文参考了互联网上前辈的一些文章 一.字典是python中最灵活的 ...

  9. 《Python编程从入门到实践》记录之字典嵌套

    目录 1.字典列表 2.在字典中存储列表 3.在字典中存储字典 1.字典列表 列表内元素是字典的形式. 字典列表例子:定义三个字典,每个包含颜色和点数两个键和其相关联的值,将其三个字典存储在一个了列表 ...

最新文章

  1. Blog 081018
  2. 转:linux svn常用命令
  3. Node与apidoc的邂逅——NodeJS Restful 的API文档生成
  4. (转)Mime类型与文件后缀对照表及探测文件MIME的方法
  5. #ifndef #define #endif 和#pragma once的区别
  6. python各个关键词的意思_想学好Python,你必须了解Python中的35个关键词
  7. axure rp pro 8.0 中文+破解补丁 v8.0.0.3333专业版
  8. 免费的MySQL数据库
  9. linux一键安装lamp教程,CentOS7下LAMP一键安装包教程
  10. python群发邮件 不进垃圾箱_邮件群发不进垃圾箱
  11. iOS IPv6测试环境搭建及服务器ipv6测试
  12. ch341a刷写华擎(ASROCK)主板BIOS教程
  13. Centos7值得收藏的网站
  14. 明日之后八级房怎么造?明日之后好看的八级房蓝图造型汇总
  15. amazeui分页打印
  16. 如何让60岁老人学会使用智能手机
  17. java 硬币_java实现硬币方案
  18. 均方误差(mean-square error, MSE)
  19. C语言高考志愿填报管理系统,高考志愿智能填报系统
  20. [软件发布]WAP网站在线浏览器 WapReader

热门文章

  1. Keepalived安装
  2. python profile_python程序之profile分析
  3. SpringBoot动态生成多个Excel文件以压缩包.zip格式下载
  4. 今年的校招,Java好拿offer吗?
  5. 玩转springboot:配置文件详细讲解
  6. Java事件处理机制和适配器
  7. Spring面试题和答案
  8. 算法--微软面试:指定数字在数组中出现的次数
  9. poj1061-青蛙的约会(拓展欧几里得java)
  10. Android中对APK进行反编译