如何确定字典中的哪个键有子字典?

给定 a uuid,我想查找并返回包含和与之关联的数据的字典。uuid我写了一个测试来描述预期的结果。


def test_search_for_cat():

    cat_id = "a2c23d62-9d06-44f4-92dc-b28875173a54"

    cat_data = {

        "senior-developer": {

            "name": "senior-developer",

            "displayName": "Senior Developer",

            "uuid": "418714f8-b3bd-4ba5-b4a7-4f87717419f4",

            "mid-level-developer": {

                "name": "mid-level-developer",

                "displayName": "Mid-level Developer",

                "uuid": "a2c23d62-9d06-44f4-92dc-b28875173a54",

            },

        }

    }


    retreived_cat = search_for_cat(cat_id, cat_data)


    assert retreived_cat == {

        "name": "mid-level-developer",

        "displayName": "Mid-level Developer",

        "uuid": "a2c23d62-9d06-44f4-92dc-b28875173a54",

    }

我已经开始编写一个函数来搜索正确的类别。


def search_for_cat(cat_id, cat_data):

    if isinstance(cat_data, dict):

        for slug, data in cat_data.items():

            if data["uuid"] == cat_id:

                return data

但我在递归部分苦苦挣扎。当uuid与给定的不匹配时cat_id,如何找到带有 dict 的键以传递给递归函数?

http://img2.mukewang.com/62d65d760001246f05200314.jpg

喵喵时光机
浏览 127回答 3
3回答

SMILET

你可以试试这个。如果对象是dictisinstance(object,dict)则返回。我们必须找到作为值映射到键的字典。首先使用 . 检查给定字典是否具有as 值。如果不是,则遍历值,如果该值是字典,则再次重复上述过程。如果存在,则返回我们正在迭代的当前字典。Truecat_idcat_iddict.values()cat_idIn [90]: cat_dataOut[90]:{'senior-developer': {'name': 'senior-developer',  'displayName': 'Senior Developer',  'uuid': '418714f8-b3bd-4ba5-b4a7-4f87717419f4',  'mid-level-developer': {'name': 'mid-level-developer',   'displayName': 'Mid-level Developer',   'uuid': 'a2c23d62-9d06-44f4-92dc-b28875173a54'}}}In [91]: cat_id = "a2c23d62-9d06-44f4-92dc-b28875173a54"In [94]: def recur(_dict,val):    ...:     if val in _dict.values():    ...:         return _dict    ...:     else:    ...:         for v in _dict.values():    ...:             if isinstance(v,dict):    ...:                 return recur(v,val)In [95]: recur(cat_data,cat_id)Out[95]:{'name': 'mid-level-developer', 'displayName': 'Mid-level Developer', 'uuid': 'a2c23d62-9d06-44f4-92dc-b28875173a54'}In [96]: retrived_cat=recur(cat_data,cat_id)In [97]: retrived_catOut[97]:{'name': 'mid-level-developer', 'displayName': 'Mid-level Developer', 'uuid': 'a2c23d62-9d06-44f4-92dc-b28875173a54'}

芜湖不芜

isinstance(myObject,dict).例如:isinstance({},dict)返回真,而isinstance([],dict)返回 False

拉丁的传说

if is_instance(slug, _dict):     search_for_cat_id(cat_id, _dict[slug])只需在 return 语句下面添加这个
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python