为了账号安全,请及时绑定邮箱和手机立即绑定

在与列表混合的嵌套字典中查找键

在与列表混合的嵌套字典中查找键

红颜莎娜 2023-12-05 15:34:42
我从 API 获取 JSON 数据。数据集很大并且是嵌套的。我可以Datenreihen这样访问密钥:jsondata.get("Ergebnis")[0].get("Kontakte").get("Datenreihen")正如您所看到的,这是字典和列表的混合体。我尝试了以下方法,但对于列表不起作用:-(。def recursive_lookup(k, d):    if k in d:        return d[k]    for v in d.values():        if isinstance(v, dict):            return recursive_lookup(k, v)    return None# Worksrecursive_lookup("Ergebnis", jsondata)# Returns Nonerecursive_lookup("Datenreihen", jsondata)无论我的对象嵌套多深,是否有一种简单的方法可以访问和键入我的字典?这是示例数据:{    "Success":true,    "Ergebnis":[       {          "ErgA1a: KPI Zeitreihe":{             "Message":"",             "MitZielgruppe":true,             "Beschriftung":[                "2019 KW 27",                "2019 KW 28",                "2019 KW 29"             ],             "Datenreihen":{                "Gesamt":{                   "Name":"Sympathie [#4]\n(Sehr sympathisch, Sympathisch)",                   "Werte":[                      39.922142815641145,                      37.751410794385762,                      38.35504885993484                   ]                }             }          }       }    ],    "rest":[       {          "test":"bla"       }    ] } data.get("ErgebnisseAnalyse")[0].get("ErgA1a: KPI Zeitreihe")recursive_lookup("ErgA1a: KPI Zeitreihe", data)
查看完整描述

1 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

递归函数根据键字段在嵌套字典中查找值


代码


def find_item(obj, field):

    """

    Takes a dict with nested lists and dicts,

    and searches all dicts for a key of the field

    provided.

    """

    if isinstance(obj, dict):

        for k, v in obj.items():

            if k == field:

                yield v

            elif isinstance(v, dict) or isinstance(v, list):

                yield from find_item(v, field)

    elif isinstance(obj, list):

        for v in obj:

            yield from find_item(v, field)

用法


value = next(find_item(dictionary_object, field), None)

测试


# Nested dictionary

dic = {

    "a": [{"b": {"c": 1}},

          {"d": 2}],

     "e": 3}


# Values form various fields

print(next(find_item(dic, "a"), None))  # Output: [{'b': {'c': 1}}, {'d': 2}]

print(next(find_item(dic, "b"), None))  # Output: {'c': 1}

print(next(find_item(dic, "c"), None))  # Output: 1

print(next(find_item(dic, "d"), None))  # Output: 2

print(next(find_item(dic, "e"), None))  # Output: 3

print(next(find_item(dic, "h"), None))  # Output: None


查看完整回答
反对 回复 2023-12-05
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信