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

编写一个算法来计算字典中子字典的数量

编写一个算法来计算字典中子字典的数量

拉丁的传说 2021-12-21 16:29:38
我对 Python 还很陌生,并且正在为嵌套字典而苦苦挣扎。考虑一下这本词典:d = {  'a1': {    'a2': [      [1, 2, 3],      {        'a3': ({          'a4': 'cv'        }, (1, 2, 3, {          'a5': 'c'        }))      }    ]  },  'b1': {    'b2': [1, 2, 3]  },  3: '3',  (1, 2, 3): 'immutable'}如何从字典中计算子字典d。我的算法是不正确的:def count_dict(d):    # print(d.items())    return sum(1 + count_dict(v) if isinstance(v, dict) else 1 for _, v in d.items())$> print(count_dict(d))$> 6并且期望结果是 9。
查看完整描述

1 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

您可以通过递归找到所有字典。在此之前,我必须澄清以下几点:

  1. 在字典中查找而d不是在字典中查找b,对吗?

  2. 如果要查找所有字典,dict示例中有 6 个。如果你想找到所有key-value pairs,它有 9 key-value pairs

所以我有正确的两个版本,一个用于dict,一个用于key-value(仅一行差异):

def count_dict(d):

    if isinstance(d, dict):

        # count 1 if it is a dict

        count = 1

        # iterate values for dict

        iterable = d.values()

    else:

        count = 0

        iterable = d


    for v in iterable:

        if isinstance(v, dict) or isinstance(v, list) or isinstance(v, tuple) or isinstance(v, set):

            # count recursively

            count += count_dict(v)

    return count



def count_dict_pairs(d):

    if isinstance(d, dict):

        # count key-value pairs if it is a dict

        count = len(d)

        iterable = d.values()

    else:

        count = 0

        iterable = d


    for v in iterable:

        if isinstance(v, dict) or isinstance(v, list) or isinstance(v, tuple) or isinstance(v, set):

            count += count_dict(v)

    return count


def test():

    d = {

        'a1': {

            'a2': [

                [1, 2, 3],

                {

                    'a3': ({

                               'a4': 'cv'

                           }, (1, 2, 3, {

                        'a5': 'c'

                    }))

                }

            ]

        },

        'b1': {

            'b2': [1, 2, 3]

        },

        3: '3',

        (1, 2, 3): 'immutable'

    }


    print(count_dict(d))   # output 6

    print(count_dict_pairs(d))   # output 9

希望对你有帮助。


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

添加回答

举报

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