免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3599 | 回复: 8
打印 上一主题 下一主题

字典迭代方式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-18 11:37 |只看该作者 |倒序浏览
想定义一个函数:iter(a, "b", "c" , "d", "e")
返回结果为:a{"b": {"c": {"d": {"e": {}}}}}
怎么做?

论坛徽章:
0
2 [报告]
发表于 2012-10-18 11:52 |只看该作者
强化下需求:
函数:inter(cache, ["a1", "a2"], ["b1", "b2", "b3"], ["c4"]...)
返回:cache = {"a1": {"a2": {}}, "b1": {"b2": {"b3": {}}}, "c4": {}}

论坛徽章:
0
3 [报告]
发表于 2012-10-18 12:42 |只看该作者
  1. def inter(*arg):
  2.         cache = {}
  3.         def retInter(lis):
  4.                 try:
  5.                         name = lis.pop(0)
  6.                 except:
  7.                         return {}
  8.                 cach = {}
  9.                 cach[name] = retInter(lis)
  10.                 return cach
  11.         for lis in arg:
  12.                 cache.update(retInter(lis))

  13.         return cache

  14. if __name__ == "__main__":
  15.         print inter(["a1","a2"],["b1","b2","b3"],["c4"])

  16. 运行结果:
  17. # python inter.py
  18. {'a1': {'a2': {}}, 'b1': {'b2': {'b3': {}}}, 'c4': {}}

复制代码
回复 2# 追忆的风筝


   

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
4 [报告]
发表于 2012-10-18 13:18 |只看该作者
这个问题很复杂吗? 至于递归吗?
  1. [root@vps616 python]# python main.py
  2. {'a': {'b': {'c': {'d': {'e': {}}}}}}
  3. [root@vps616 python]# cat main.py
  4. #python2.7.3
  5. #coding=utf-8

  6. def MakeDict(*args):
  7.     dict_keys  = args
  8.     root_dict  = {}
  9.     built_dict = root_dict

  10.     for key in dict_keys:
  11.         built_dict[key] = {}
  12.         built_dict = built_dict[key]

  13.     return root_dict

  14. print MakeDict('a', 'b', 'c', 'd', 'e')
复制代码

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
5 [报告]
发表于 2012-10-18 13:23 |只看该作者
没看到这个需求:
  1. [root@vps616 python]# python main.py
  2. {'a1': {'a2': {}}, 'b1': {'b2': {'b3': {}}}, 'c4': {}}
  3. [root@vps616 python]# cat main.py
  4. #python2.7.3
  5. #coding=utf-8

  6. def MakeDict(*args):
  7.     key_groups = args
  8.     res_dict   = {}

  9.     def build_dict(keys):
  10.         dict_keys  = keys
  11.         root_dict  = {}
  12.         built_dict = root_dict

  13.         for key in dict_keys:
  14.             built_dict[key] = {}
  15.             built_dict = built_dict[key]

  16.         return root_dict
  17.    
  18.     for key_group in key_groups:
  19.         res_dict[key_group[0]] = build_dict(key_group[1:])

  20.     return res_dict

  21. print MakeDict(['a1', 'a2'], ['b1', 'b2', 'b3'], ['c4'])
复制代码
一点点变动.

追忆的风筝 发表于 2012-10-18 11:52
强化下需求:
函数:inter(cache, ["a1", "a2"], ["b1", "b2", "b3"], ["c4"]...)
返回:cache = {"a1":  ...

论坛徽章:
0
6 [报告]
发表于 2012-10-19 14:12 |只看该作者
回复 5# linux_c_py_php

必须要赞下。
   

论坛徽章:
0
7 [报告]
发表于 2012-10-19 15:08 |只看该作者
回复 5# linux_c_py_php

把代码稍微精炼了下,如下:
  1. def generate(cache, *args):
  2.     for keys in args:
  3.         if keys:
  4.             cache[keys[0]] = {}
  5.             generate(cache[keys[0]], keys[1:])
  6.     return cache

  7. cache = {}
  8. print generate(cache, ['a1', 'a2'], ['b1', 'b2', 'b3'], ['c4'])
复制代码

论坛徽章:
0
8 [报告]
发表于 2012-10-22 12:08 |只看该作者
回复 7# 追忆的风筝

这个不错!
   

论坛徽章:
0
9 [报告]
发表于 2012-10-23 11:58 |只看该作者
看了这些代码才发现,我要走的路还很长。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP