首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从JSON文件中省略缺少Python JSON中其他字典中的键的字典?

如何从JSON文件中省略缺少Python JSON中其他字典中的键的字典?
EN

Stack Overflow用户
提问于 2022-10-13 16:43:37
回答 1查看 16关注 0票数 0

我有一个大的嵌套JSON (下面的结构片段),我正在为键FLOODINGdatefilename提取键/值对。但是,所有字典都没有用于filename的键/值对,我希望在提取之前或提取时省略这些字典。

代码语言:javascript
复制
      74': {    '18': {  'FLOODING': True,
                         'FULL-DATA-COVERAGE': True,
                         'date': '2019-05-03'},
                '19': {  'FLOODING': True,
                         'FULL-DATA-COVERAGE': True,
                         'date': '2019-05-06'},
                '2': {   'FLOODING': False,
                         'FULL-DATA-COVERAGE': True,
                         'date': '2019-03-02',
                         'filename': 'S2_2019-03-02'},
                '20': {  'FLOODING': True,
                         'FULL-DATA-COVERAGE': False,
                         'date': '2019-05-08'},
                         …

我有一个函数(参见下面的代码),它很好地为所需的键输入提取信息。当JSON中的所有字典都有相同的键时,这将导致提取长度相等的数组。当一些字典缺少钥匙时,它就不会了。因此,我想略去缺少钥匙的字典,但却很难做到这一点。在提取信息并将JSON与省略的字典一起保存为新文件之前,很可能会出现这种遗漏。

代码语言:javascript
复制
def json_extract(obj, key):
    """Recursively fetch values from nested JSON."""
    arr = []

    def extract(obj, arr, key):
        """Recursively search for values of key in JSON tree."""
        if isinstance(obj, dict):
            for k, v in obj.items():
                if isinstance(v, (dict, list)):
                    extract(v, arr, key)
                elif k == key:
                    arr.append(v)
        elif isinstance(obj, list):
            for item in obj:
                extract(item, arr, key)
        return arr

    values = extract(obj, arr, key)
    return values
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-13 17:48:54

看起来您的数据有一些固定的结构,但是一般情况下的递归代码可以处理任何数据结构,不管数据块和列表嵌套得有多深。缺点是它不知道它目前在数据结构中的位置。

如果我的假设是正确的,那么一个简单的非递归代码可以遍历obj

代码语言:javascript
复制
for d1 in obj.values():    # top level is a dict
    for d2 in d1.values():    # level below is also a dict
        if 'filename' not in d2:
            continue          # disregard this one, it is incomplete
        if key in d2:
            arr.append(d2[key]) # extract value
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74059205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档