免费注册 查看新帖 |

Chinaunix

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

关于字典递归赋值的求助. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-05 06:25 |只看该作者 |倒序浏览
本帖最后由 highkeji 于 2010-07-05 06:28 编辑

很奇怪, 感觉这个应该很常用可是居然Google不到任何结果....

要实现的是给一个可能为空的(类似)字典之内的N层的某一个参数赋值.

我会PHP, 在PHP中实现是这么操作:

  1. $z['Corp'][$corpId][$year]['oridata'] = $newRecord
  2. //所有键都可能不存在也可能已经有数据
复制代码
我现在在Python中的实现方法如下:

  1. newRecord = 'something'
  2. z = zodbConn() #理解成 z={}即可.
  3. try:
  4.     z['Corp'][corpId][year]['oridata'] = newRecord
  5. except KeyError:
  6.     if z.has_key('Corp') == False:     
  7.     #因为可能已有数据, 所以不能写成 z{'Corp':{corpid:{year{'oridata':newRecord}}}}这样
  8.         z['Corp'] = OOBTree() #理解成  z['Corp'] = {}即可.
  9.         if z['Corp'].has_key(corpId) == False:
  10.             z['Corp'][corpId] = {}
  11.             if z['Corp'][corpId].has_key(year) == False:
  12.                 z['Corp'][corpId][year] = {}
  13.                 z['Corp'][corpId][year]['oridata'] = newRecord
复制代码
请问Python有简单些的实现方法么?
PS. 代码高亮怎么用啊~

论坛徽章:
0
2 [报告]
发表于 2010-07-05 11:20 |只看该作者
那层为空有什么影响?
z={'Corp':{}}
corpId='123'
year='2010'
z={'Corp':{corpId:{year:{'oridata':0}}}}
print z

论坛徽章:
0
3 [报告]
发表于 2010-07-05 14:33 |只看该作者
本帖最后由 starfuck 于 2019-11-26 23:30 编辑












论坛徽章:
0
4 [报告]
发表于 2010-07-05 19:06 |只看该作者
本帖最后由 highkeji 于 2010-07-05 19:08 编辑
那层为空有什么影响?
z={'Corp':{}}
corpId='123'
year='2010'
z={'Corp':{corpId:{year:{'oridata':0 ...
luffy.deng 发表于 2010-07-05 11:20


在这个操作之前可能已经有数据了
也就是说可能

  1. z={'Corp':{456:{2010:xxxxx
复制代码
按照你这个操作原来456的数据就没了~

论坛徽章:
0
5 [报告]
发表于 2010-07-05 21:27 |只看该作者
回复 4# highkeji
这样的话  重写  __missing__ 或者  __getitem__都可以实现。
  1. class mDict(dict):

  2.     def __missing__(self, key):

  3.         self[key] = mDict()

  4.         return self[key]

  5.     #def __getitem__(self,key):

  6.         #if not self.has_key(key):

  7.             #self[key]=mDict()

  8.         #return dict.__getitem__(self, key)

  9. a =mDict()

  10. a[1][2]

  11. print  a

  12. a[1][2][3]=5

  13. print a
复制代码

论坛徽章:
0
6 [报告]
发表于 2010-07-06 09:37 |只看该作者
回复 5# luffy.deng


    Thanks
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP