问题描述
我有个json文件,里面存了一个大列表,列表里嵌套了很多字典,每个字典里面的value又是用列表存起来的,像这样:
[{"domain": ["http://www.akzonel.com", "http://www.AK20Nobel.com"]},{"domain": ["http://www.tcl.com", "http://nyell.td.com"]},......]
想知道如何把所有的value全部提取出来,单独存在一个列表中
问题出现的环境背景及自己尝试过哪些方法
这是我尝试的代码,提取前五个字典的:
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
import json
def resolveJson():
file = '../save.json'
f_obj = open(file)
number = json.load(f_obj)
res = []
for i in range(0,5):
domain = number[i]["domain"]
res.append(domain)
print(res)
resolveJson()
你期待的结果是什么?实际看到的错误信息又是什么?
目前得到是这样:
[['http://www.akzonel.com', 'http://www.AK20Nobel.com'], ['http://www.tcl.com', 'http://nyell.td.com', 'http://www.tclcomm.com', 'http://www.tcl.com', 'http://www.tcldisplay.com', 'http://www.tcl-cctv.com']......],说白了还是列表里面嵌套列表,而没有把所有的网址都取出来存到一个大列表中。
希望得到结果:
['http://www.akzonel.com', 'http://www.AK20Nobel.com','http://www.tcl.com', 'http://nyell.td.com', 'http://www.tclcomm.com', 'http://www.tcl.com', 'http://www.tcldisplay.com', 'http://www.tcl-cctv.com',.......]
有人能帮忙吗?
不知道你的数据量有多大,有很多种方法解决这个问题,其中比较简单的一种就是递归。注意,如果递归方法出现溢出,可以考虑改写成循环。
既然你已经得到了嵌套了列表,那么我就从你的嵌套列表开始操作。假设你的数据是这样的:
那么我们可以定义一个函数
read
和一个全局变量results
,递归调用来获取所有结果:直接输入
data
:最终的结果为:
完整代码如下: