实际上我有两个词典“d”和“d1”,其中dict“d”包含一些组,而dict“d1”包含公式。
d = {
'a;0': {'2010': 'A;B', 'p': '', 'r': ''},
'a;1': {'2010': '1;', 'p': '', 'r': ''},
'a;2': {'2010': '7;8', 'p': '', 'r': ''},
'b;0': {'2010': 'C;D', 'p': '', 'r': ''},
'b;1': {'2010': '5;6', 'p': '', 'r': ''}
}
此处a;0
包含字段2010
中的标记(即A,B),b;0
是另一个包含标记的组(C,D),a;1
,{ {1}}是a;2
的子组,包含字段a;0
('1','')和('7','8')中的值,类似2010
是子-{1}}中的-group包含值('5','6')。
b;1
这是公式dict,其中b;0
和d1 = {
'F':{'p':'','r':'','2010':'A+B'},
'G':{'p':'','r':'','2010':'F+A'}
}
,当我尝试使用下面的代码运行它时,它只打印F='A+B
值而不是G=F+A
值。我使用的代码是
F
由此在组中打印,但未计算“G”的值
这是
的输出G
但我想要的输出是
tag=[]
d2={}
for k,v in d.items():
if ';' in k: # i am checking in main dict is their any subgroups
a=k.split(';')
if a[1]=='0': # i am splitting it and checking if list zero bcoz main groups contain 0 ie('a;0','b;0')
pass
else:
tag=d[a[0]+';0']['2010'].split(";")#splitting main group into tags
value=v['2010'].split(";") #contain values
c=[0 if value[i]=='' else value[i] for i in range(len(value))]# if any balnk value in list values make it zero.bcoz i should use it eval
for i in range(len(c)): #converting to int
try:
c[i]=int(c[i])
except ValueError:
c[i]=str(c[i])
x=dict(zip(tag,c)) # making a dict of tag n values for each iteration
print '<%s>'%a[0] #printing group name
for i in range(len(value)):
if value[i]=='':
tag[i]=''
else:
print '<%s>%s<%s>'%(tag[i],value[i],tag[i])
for k,v in d1.items():
try:
d2[k]={'p':'','r':'','2010':eval(d1[k]['2010'],x)} #trying to use eval
except NameError:
continue
print '</%s>'%a[0]
我想在组中打印'G'值
请任何人帮助我,提前谢谢
答案 0 :(得分:2)
您的代码真的不容易阅读。看了半个小时后,我仍然无法弄清楚它在做什么。一些一般指示:
如果你做了这一切,你可能会很容易地找到你自己的错误,但如果没有,那么用更易读的代码回复。