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

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

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

喵喵时光机 2022-07-19 15:29:24
给定 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 的键以传递给递归函数?
查看完整描述

3 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

你可以试试这个。如果对象是dictisinstance(object,dict)则返回。我们必须找到作为值映射到键的字典。首先使用 . 检查给定字典是否具有as 值。如果不是,则遍历值,如果该值是字典,则再次重复上述过程。如果存在,则返回我们正在迭代的当前字典。Truecat_idcat_iddict.values()cat_id


In [90]: cat_data

Out[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_cat

Out[97]:

{'name': 'mid-level-developer',

 'displayName': 'Mid-level Developer',

 'uuid': 'a2c23d62-9d06-44f4-92dc-b28875173a54'}


查看完整回答
反对 回复 2022-07-19
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

isinstance(myObject,dict).

例如:

isinstance({},dict)

返回真,而

isinstance([],dict)

返回 False


查看完整回答
反对 回复 2022-07-19
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

if is_instance(slug, _dict):
    search_for_cat_id(cat_id, _dict[slug])

只需在 return 语句下面添加这个


查看完整回答
反对 回复 2022-07-19
  • 3 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号