忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 728 | 回复: 5

嵌套字典赋值问题,急急急 [复制链接]

论坛徽章:
0
发表于 2017-06-01 16:41 |显示全部楼层
Interface Rx-ok Rx-err Rx-drp Tx-ok Tx-err Tx-drp
eth0     2503421  20     11   620321   0      0
lo        32321    0      0    42121   0      0
wlan0    4211232 900    489   72302233 211     0

处理这个表格文件,
我想把第一列跟第一行的值作为dict的两个维度然后去对应值:
比如a[rx-ok][eth0]=2503421......
  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3. f = file('data2.txt')
  4. rows=f.readline().split(' ')[1:]
  5. lines=f.readlines()                              #从文件中读取全部行
  6. f.close
  7. columns=[]
  8. for line in lines:                               #对每一行数据进行处理
  9.     data = line.split()
  10.     for score in data[0:1]:
  11.         columns.append(score)



  12. print rows,columns
  13. lib={}
  14. for line in lines:
  15.     for i in range(0,6):
  16.         for j in range(0,3):
  17.           lib[rows[i]][columns[j]]=line.split()[i+1]
  18.     print lib
复制代码
  File "/Users/tynnlau/PycharmProjects/Python_Learning/PY01/dataprocess.py", line 23, in <module>    lib[rows][columns[j]]=line.split()[i+1]KeyError: 'Rx-ok'
但是那个key好像会有问题,不能这样直接给嵌套字典赋值吗?

论坛徽章:
1
15-16赛季CBA联赛之新疆
日期:2017-03-09 12:33:45
发表于 2017-06-01 17:34 |显示全部楼层
  1. #! /usr/bin/env python

  2. import sys
  3. import re

  4. def get_version3():
  5.         if sys.version[0] == '2':
  6.                 return False
  7.         return True

  8. def get_input(fin):
  9.         bmode = False
  10.         if 'b' in fin.mode:
  11.                 bmode = True

  12.         idx = 0
  13.         cols = []
  14.         retdict = dict()
  15.         for l in fin:
  16.                 if bmode and get_version3():
  17.                         l = l.decode(encoding='UTF-8')
  18.                 l = l.rstrip('\r\n')
  19.                 sarr = re.split('\s+',l)
  20.                 if idx  == 0:
  21.                         cols.extend(sarr[1:])
  22.                 else:
  23.                         jdx = 0
  24.                         newdict = dict()                       
  25.                         for c in cols:
  26.                                 jdx += 1
  27.                                 if jdx >= len(sarr):
  28.                                         continue
  29.                                 newdict[c] = sarr[jdx]
  30.                         retdict[sarr[0]]= newdict
  31.                 idx += 1
  32.         return retdict

  33. def main():
  34.         fin = sys.stdin
  35.         retdict = get_input(fin)
  36.         print('%s'%(repr(retdict)))
  37.         return

  38. main()

复制代码

论坛徽章:
0
发表于 2017-06-03 19:26 |显示全部楼层
#!/usr/bin/python
# -*- coding: UTF-8 -*-
f = file('data2.txt')
inf=[i.strip().split() for i in f]
f.close()
x=inf[0][1:]

y=[j[0] for i,j in enumerate(inf) if i>0]
lib={}
for i,j in enumerate(x):
    libx={}
    inx=[jj[i+1] for ii,jj in enumerate(inf) if ii>0]
    for iii,jjj in enumerate(inx):
        libx[y[iii]]=jjj
    lib[x[i]]=libx

print lib

论坛徽章:
0
发表于 2017-06-06 14:17 |显示全部楼层
回复 3# cdbclx

这个work,厉害

论坛徽章:
10
2015年迎新春徽章
日期:2015-03-04 09:55:2815-16赛季CBA联赛之辽宁
日期:2016-12-15 10:24:1715-16赛季CBA联赛之佛山
日期:2016-11-30 09:04:2015-16赛季CBA联赛之江苏
日期:2016-04-29 15:56:1215-16赛季CBA联赛之同曦
日期:2016-04-12 13:21:182016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之山东
日期:2016-02-16 11:37:52每日论坛发贴之星
日期:2016-02-07 06:20:00程序设计版块每日发帖之星
日期:2016-02-07 06:20:002017金鸡报晓
日期:2017-02-08 10:39:42
发表于 2017-06-07 08:52 |显示全部楼层
本帖最后由 bskay 于 2017-06-07 08:59 编辑

text="""Interface Rx-ok Rx-err Rx-drp Tx-ok Tx-err Tx-drp
eth0     2503421  20     11   620321   0      0
lo        32321    0      0    42121   0      0
wlan0    4211232 900    489   72302233 211     0"""

d=map(lambda l:l.split(), text.splitlines())
r=dict(map(lambda l: (l[0],dict(zip(d[0][1:],l[1:]))), d[1:]))

参考上面把x,y维度调整过来

b={}
[b.setdefault(k1,{}).setdefault(k,v1) for k,v in a.items() for k1,v1 in v.items()]

b['Rx-ok']['eth0']

论坛徽章:
0
发表于 2017-06-22 17:50 |显示全部楼层
回复 1# gymgod

hi
  楼主知道为何赋值的时候会报 Key error的错误吗?  想请教下原理

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

本版积分规则

SACC2017购票8.8折优惠进行时

2017中国系统架构师大会(SACC2017)将于10月19-21日在北京新云南皇冠假日酒店震撼来袭。今年,大会以“云智未来”为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置2大主会场,18个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100余位技术专家及行业领袖来分享他们的经验;并将吸引4000+人次的系统运维、架构师及IT决策人士参会,为他们提供最具价值的交流平台。
----------------------------------------
优惠时间:2017年8月2日前

活动链接>>
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP