关于python实现json/字典数据中所有key路径拼接组合问题
短信预约 -IT技能 免费直播动态提醒
案例需求:
在已知的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路径拼接内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341