X. *_*Shi 1 python json dictionary
我是Python的新手,正在努力从dict文件中提取某些信息.
我有数百万个存储文本数据的JSON文件.所有JSON文件都具有类似的结构.结构方面有很多变化.对于每个JSON文件,我想从特定键中提取所有文本字符串并将它们存储为dict.
json1和json2下面被简化的实例.我一直在做的是从JSON文件中取样,分析它们,编写大量的if语句,试图包含所有可能的变体.但是,我发现它效率低下,但仍然无法包含所有场景.我想知道是否有一种使用密钥搜索和提取值的一般方法"text".
json1 = {
"section": {
"heading":{"lvl":"A1", "text":"today"},
"paragraph":[
{"color":"green", "text":"yesterday"},
{"color":"purple", "text":"tomorrow"}
]
}
}
json2 = {
"paragraph":{"text":"everyday", "color": "black"}
}
Run Code Online (Sandbox Code Playgroud)
换句话说,我希望得到一个包含所有文本字符串的字典,其中包含"text"键.因为json1,我想得到{"json1":"today yesterday tomorrow"}.因为json2,我想得到{"json2":"everyday"}.
任何帮助是极大的赞赏.
如果您不知道其他任何内容,并且您所暗示的结构可能相当随意,那么您必须访问每个节点并进行检查.这可以使用递归以通用方式实现.这是一个快速而肮脏的功能来实现它:
In [4]: def extract_text(obj, acc):
...: if isinstance(obj, dict):
...: for k, v in obj.items():
...: if isinstance(v, (dict, list)):
...: extract_text(v, acc)
...: elif k == "text":
...: acc.append(v)
...: elif isinstance(obj, list):
...: for item in obj:
...: extract_text(item, acc)
...:
Run Code Online (Sandbox Code Playgroud)
以下是如何使用它:
In [5]: acc1 = []
In [6]: extract_text(json1, acc1)
In [7]: acc1
Out[7]: ['yesterday', 'tomorrow', 'today']
In [8]: acc2 = []
In [9]: extract_text(json2, acc2)
In [10]: acc2
Out[10]: ['everyday']
Run Code Online (Sandbox Code Playgroud)
请注意,您的问题与JSON没有任何关系,JSON是一种基于文本的数据序列化格式.您已经在处理反序列化数据和python数据结构.无论如何,如果你真的想要你的问题所带来的结果,你可以简单地做:
In [11]: {"json1": ",".join(acc1)}
Out[11]: {'json1': 'yesterday,tomorrow,today'}
Run Code Online (Sandbox Code Playgroud)
或者您喜欢加入的任何分隔符,例如简单的空格:
In [12]: {"json1": " ".join(acc1)}
Out[12]: {'json1': 'yesterday tomorrow today'}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
456 次 |
| 最近记录: |