免费注册 查看新帖 |

Chinaunix

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

字典赋值的报错 [复制链接]

论坛徽章:
8
戌狗
日期:2014-09-26 16:39:44水瓶座
日期:2014-10-10 02:06:57金牛座
日期:2014-10-11 23:04:042015亚冠之首尔
日期:2015-06-23 15:37:0015-16赛季CBA联赛之天津
日期:2016-01-22 18:58:2915-16赛季CBA联赛之佛山
日期:2016-05-31 19:18:0815-16赛季CBA联赛之同曦
日期:2016-08-10 16:26:3315-16赛季CBA联赛之辽宁
日期:2018-01-10 11:47:40
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-11-17 16:46 |只看该作者 |正序浏览
本帖最后由 wiliiwin 于 2014-11-17 17:23 编辑
  1. # more Master.conf
  2. [Master]
  3. host=192.168.100.62
  4. source=/home/master/tools
  5. md5sum=/home/master/tools/md5sum
  6. version=1.0.4

  7. [QA]
  8. host=192.168.100.61
  9. user=jqa
  10. tomcat=/home/jqa/opt/apache-tomcat-6.0.41/webapps
  11. db2=db2inst@db2inst

  12. [VIS]
  13. host=192.168.100.15
  14. user=jqa
  15. tomcat=/home/jqa/opt/apache-tomcat-6.0.41/webapps
  16. db2=db2inst@db2inst
复制代码
我想把此文件的[]里面的内容和=左边的值作为字典的key,和perl里面的哈希的哈希相似的字典,下面是我的代码
  1. #!/usr/bin/python
  2. import re

  3. hash={}
  4. fd=open('Master.conf','r')
  5. for  line in  fd:
  6.      flag=0
  7.      matchObj=re.match('\[(\w+)\]',line)
  8.      if matchObj:
  9.           outer_key=matchObj.group(1)     
  10.      elif flag==0:
  11.           matchobj=re.match('(.*?)=(.*)',line)
  12.           if matchobj:
  13.              hash[outer_key][matchobj.group(1)]=matchobj.group(2)
  14. #print hash[outer_key][matchobj.group(1)]
复制代码
执行这个脚本的时候,报了一个错误,
  1. 1.py
  2. Traceback (most recent call last):
  3.   File "./1.py", line 14, in ?
  4.     hash[outer_key][matchobj.group(1)]=matchobj.group(2)
  5. KeyError: 'Master'
复制代码
说是错误的键,不知道为什么会有这样的报错呢?请指教。

论坛徽章:
0
16 [报告]
发表于 2014-11-19 19:31 |只看该作者
字典不存在二维的说法,说以dit1=["A"]={"B":"test"}这样追加才行

论坛徽章:
8
戌狗
日期:2014-09-26 16:39:44水瓶座
日期:2014-10-10 02:06:57金牛座
日期:2014-10-11 23:04:042015亚冠之首尔
日期:2015-06-23 15:37:0015-16赛季CBA联赛之天津
日期:2016-01-22 18:58:2915-16赛季CBA联赛之佛山
日期:2016-05-31 19:18:0815-16赛季CBA联赛之同曦
日期:2016-08-10 16:26:3315-16赛季CBA联赛之辽宁
日期:2018-01-10 11:47:40
15 [报告]
发表于 2014-11-19 11:23 |只看该作者
回复 14# shreychen

在python是不允许的,但是在perl是可以的,我是按perl的习惯来的。


   

论坛徽章:
1
2015七夕节徽章
日期:2015-08-21 17:58:43
14 [报告]
发表于 2014-11-19 09:46 |只看该作者
问题应该出在这里
hash[outer_key][matchobj.group(1)]=matchobj.group(2)


for之前 hash = {}
hash[“XXX”]都没有赋值,hash["XXX"]["YYY"]当然会报错了

论坛徽章:
8
戌狗
日期:2014-09-26 16:39:44水瓶座
日期:2014-10-10 02:06:57金牛座
日期:2014-10-11 23:04:042015亚冠之首尔
日期:2015-06-23 15:37:0015-16赛季CBA联赛之天津
日期:2016-01-22 18:58:2915-16赛季CBA联赛之佛山
日期:2016-05-31 19:18:0815-16赛季CBA联赛之同曦
日期:2016-08-10 16:26:3315-16赛季CBA联赛之辽宁
日期:2018-01-10 11:47:40
13 [报告]
发表于 2014-11-18 15:24 |只看该作者
回复 12# Buring__
是的 这样是可以的,python不能直接hash[][]的形式来赋值


   

论坛徽章:
9
2015亚冠之大阪钢巴
日期:2015-06-04 11:47:30丑牛
日期:2015-01-22 15:49:26巳蛇
日期:2015-01-22 10:11:18巨蟹座
日期:2014-11-20 10:55:03天蝎座
日期:2014-11-16 22:10:26处女座
日期:2014-11-16 11:01:10申猴
日期:2014-09-19 11:12:37双鱼座
日期:2014-07-25 10:09:54程序设计版块每日发帖之星
日期:2015-08-24 06:20:00
12 [报告]
发表于 2014-11-18 15:09 |只看该作者
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. import re

  4. h=dict()
  5. fd=open('urfile','r')
  6. for line in fd:
  7.     flag=0
  8.     m=re.match('\[(\w+)\]',line)
  9.     if m:
  10.         outer_key=m.group(1)
  11.         h[outer_key]=dict()

  12.     elif flag==0:
  13.         m=re.match('(.*)=(.*)',line)
  14.         if m:
  15.             h[outer_key][m.group(1)]=m.group(2)
  16. print h
  17. fd.close()
复制代码

论坛徽章:
8
戌狗
日期:2014-09-26 16:39:44水瓶座
日期:2014-10-10 02:06:57金牛座
日期:2014-10-11 23:04:042015亚冠之首尔
日期:2015-06-23 15:37:0015-16赛季CBA联赛之天津
日期:2016-01-22 18:58:2915-16赛季CBA联赛之佛山
日期:2016-05-31 19:18:0815-16赛季CBA联赛之同曦
日期:2016-08-10 16:26:3315-16赛季CBA联赛之辽宁
日期:2018-01-10 11:47:40
11 [报告]
发表于 2014-11-18 11:29 |只看该作者
回复 10# Linux_manne
和perl不一样,perl是可以的,想了下确实不可以,因为这样的话无法知道是数组的数组,还是哈希的哈希,我一直用perl的技巧在python上使用,看来这个需要转变下


   

论坛徽章:
5
巨蟹座
日期:2014-08-28 18:12:342015年迎新春徽章
日期:2015-03-04 10:01:4415-16赛季CBA联赛之江苏
日期:2016-04-28 09:43:3115-16赛季CBA联赛之吉林
日期:2016-06-22 10:34:4315-16赛季CBA联赛之山西
日期:2016-08-16 16:29:55
10 [报告]
发表于 2014-11-18 09:11 |只看该作者
本帖最后由 Linux_manne 于 2014-11-20 09:13 编辑

回复 9# wiliiwin


     哦 之前说错了。。 是可以那样附值的... 只是你先要构造出{key:{key:vaule}} 这种形式, 单独{} 这样的形式 d[][] 肯定会不对.

论坛徽章:
8
戌狗
日期:2014-09-26 16:39:44水瓶座
日期:2014-10-10 02:06:57金牛座
日期:2014-10-11 23:04:042015亚冠之首尔
日期:2015-06-23 15:37:0015-16赛季CBA联赛之天津
日期:2016-01-22 18:58:2915-16赛季CBA联赛之佛山
日期:2016-05-31 19:18:0815-16赛季CBA联赛之同曦
日期:2016-08-10 16:26:3315-16赛季CBA联赛之辽宁
日期:2018-01-10 11:47:40
9 [报告]
发表于 2014-11-17 20:16 |只看该作者
本帖最后由 wiliiwin 于 2014-11-17 20:35 编辑

python貌似不支持直接用dict[][]这种方式来赋值的。
  1. #!/usr/bin/perl
  2. my $hash;

  3. $hash{'a'}{'b'}='c';
  4. $hash{'a'}{'e'}='f';
  5. printf  "$hash{'a'}{'b'}\n";
  6. printf  "$hash{'a'}{'e'}\n";
复制代码
  1. # ./1.pl
  2. c
  3. f
复制代码
  1. # more test.py
  2. #!/usr/bin/python

  3. dict={}

  4. dict['a']['b']='c'
  5. print dict['a']['b']

  6. [code]# ./test.py
  7. Traceback (most recent call last):
  8.   File "./test.py", line 5, in ?
  9.     dict['a']['b']='c'
  10. KeyError: 'a'
复制代码

论坛徽章:
8
戌狗
日期:2014-09-26 16:39:44水瓶座
日期:2014-10-10 02:06:57金牛座
日期:2014-10-11 23:04:042015亚冠之首尔
日期:2015-06-23 15:37:0015-16赛季CBA联赛之天津
日期:2016-01-22 18:58:2915-16赛季CBA联赛之佛山
日期:2016-05-31 19:18:0815-16赛季CBA联赛之同曦
日期:2016-08-10 16:26:3315-16赛季CBA联赛之辽宁
日期:2018-01-10 11:47:40
8 [报告]
发表于 2014-11-17 19:52 |只看该作者
回复 7# 609854
不是追加的问题,我打印是在循环里面的。现在问题是报key的错误。


   
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP