首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定一个dict中的哪个键有一个子dict?

如何确定一个dict中的哪个键有一个子dict?
EN

Stack Overflow用户
提问于 2020-02-05 19:52:10
回答 3查看 114关注 0票数 0

给定一个uuid,我希望找到并返回包含uuid及其关联数据的dict。我写了一个测试来描述预期的结果。

代码语言:javascript
复制
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",
    }

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

代码语言:javascript
复制
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的键以传递给递归函数?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-05 20:07:17

你可以试试这个。如果对象是dict,isinstance(object,dict)返回True。我们必须找到将cat_id作为映射到键的值的字典。首先,检查给定的字典是否使用cat_id作为值,是否使用dict.values()。如果不是,则迭代值,如果值是字典,则再次重复上述过程。如果cat_id在其中,那么返回我们正在迭代的当前字典。

代码语言:javascript
复制
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'}
票数 2
EN

Stack Overflow用户

发布于 2020-02-05 20:10:59

isinstance(myObject,dict)

例如:

代码语言:javascript
复制
isinstance({},dict)

返回true

代码语言:javascript
复制
isinstance([],dict)

返回假

票数 -1
EN

Stack Overflow用户

发布于 2020-02-05 20:10:10

代码语言:javascript
复制
if is_instance(slug, _dict):
    search_for_cat_id(cat_id, _dict[slug])

只需在返回语句下面添加以下内容

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60083143

复制
相关文章

相似问题

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