前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试宝典_Python.常规算法.000

面试宝典_Python.常规算法.000

作者头像
py3study
发布2020-01-10 11:38:06
5380
发布2020-01-10 11:38:06
举报
文章被收录于专栏:python3python3

面试题目:

1. 用PYTHON实现一个扁平化的字典,如{'a': {'b': '1'}}扁平化处理后变成{'a.b': 1}?

解题思路:

1. 由于字典可能是无限嵌套的,所以第一印象就想到采用递归函数完成,由于扁平化数据需要零时存储以及永久存储,而字典在递归中是非常方便的,递归函数中只需要遍历字典元素如果子元素不是字典则计算扁平化字典的key然后记录,否则就继续递归此子元素,依次类推.

具体实现:

代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2016-12-24 17:32:54
# @Author  : 李满满 (xmdevops@vip.qq.com)
# @Link    : http://xmdevops.blog.51cto.com/
# @Version : $Id$

from __future__ import absolute_import
# 说明: 导入公共模块
# 说明: 导入其它模块


def flat_dict(src_dict, res_dict):
    if not isinstance(src_dict, dict):
        return
    for key in src_dict:
        # 说明: 防止第一次零时数据中多加一个.
        cur = res_dict['_']
        if not cur:
            res_dict['_'] += key
        else:
            res_dict['_'] += '.{0}'.format(key)
        # 说明: 如果当前元素不是字典则记录它
        if not isinstance(src_dict[key], dict):
            res_dict.update({res_dict['_']: src_dict[key]})
            # 说明: 既然不是字典则可能需要遍历同级元素所以需要还原到加key之前的数据
            res_dict['_'] = res_dict['_'].rstrip('.{0}'.format(key))
            continue
        # 说明: 如果当前元素依然是字典则继续递归此元素
        flat_dict(src_dict[key], res_dict)


if __name__ == '__main__':
    # 说明: _中保存零时扁平化数据
    result = {'_': ''}
    manman = {'a': {'b': {'c': 1, 'd': 2}, 'x': 2}}
    flat_dict(manman, result)
    # 说明: 处理完后pop出_零时数据
    result.pop('_')
    print result
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档