python 多级字典值合并:#!/bin/env python
import os,sys,re
import cStringIO
f=open(‘/tmp/3.txt‘)
‘‘‘
/tmp/3.txt content:
148616 ‘192.168.0.127:8080‘ 0.157 {‘200‘: 130000, ‘206‘: 250, ‘301‘: 90, ‘302‘: 6698, ‘304‘: 6018, ‘406‘: 5}
148616 ‘192.168.0.127:8080‘ 0.157 {‘200‘: 130999, ‘206‘: 250, ‘301‘: 90, ‘302‘: 6698, ‘304‘: 6018, ‘406‘: 5}
100 ‘192.168.0.126:8080‘ 90.007 {‘200‘: 1}
‘‘‘
d={}
p=re.compile("([0-9]+).*\‘([0-9]+.[0-9]+.[0-9]+.[0-9]+:,?.*?)\‘.*?([0-9]+\.[0-9]+).*({.*})")
s=cStringIO.StringIO()
for line in f:
host_port=str(re.match(p,line).group(2).split(‘,‘)[-1].strip())
Drespon_code=eval(re.match(p,line).group(4))
# Drespon_200code=eval(re.match(p,line).group(4))[‘200‘]
d[host_port]=Drespon_code
s.write(str(d)+",")
#print d
d={}
ret={}
for dict in eval(s.getvalue().rstrip(‘,‘)):
for key,val in dict.iteritems():
for zkey in val.keys():
host_key=str(key+"_"+zkey)
num=ret.get(host_key,0)
num+=val[zkey]
ret[host_key]=num
print ret
‘‘‘
{‘192.168.0.127:8080_406‘: 10, ‘192.168.0.126:8080_200‘: 1, ‘192.168.0.127:8080_200‘: 260999, ‘192.168.0.127:8080_206‘: 500, ‘192.168.0.127:8080_301‘: 180, ‘192.168.0.
127:8080_302‘: 13396, ‘192.168.0.127:8080_304‘: 12036
‘‘‘