面试宝典_Python.常规算法.0003.用Python去实现一个扁平化的字典?
#!/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, dict):
res_dict.update({res_dict['_']: src_dict})
# 说明: 既然不是字典则可能需要遍历同级元素所以需要还原到加key之前的数据
res_dict['_'] = res_dict['_'].rstrip('.{0}'.format(key))
continue
# 说明: 如果当前元素依然是字典则继续递归此元素
flat_dict(src_dict, res_dict)
if __name__ == '__main__':
# 说明: _中保存零时扁平化数据
result = {'_': ''}
manman = {'a': {'b': {'c': 1, 'd': 2}, 'x': 2}}
flat_dict(manman, result)
# 说明: 处理完后pop出_零时数据
result.pop('_')
print result
页:
[1]