На самом деле у меня есть два dict "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
, a;2
- это подгруппы a;0
, содержащие значение в поле 2010
('1', '') и ('7', '8') аналогично b;1
является подгруппой в b;0
, содержащей значения ('5', '6').
d1 = {
'F':{'p':'','r':'','2010':'A+B'},
'G':{'p':'','r':'','2010':'F+A'}
}
Это формула dict, где F='A+B
и G=F+A
, когда я пытаюсь запустить это с кодом ниже, он печатает только F
значение, а не 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' не вычисляется
Вывод из этого
<a>
<A>7</A>
<B>8</A>
<F>15</F>
</a>
<a>
<A>1</A>
<F>1</F>
</a>
<b>
<C>5</C>
<D>6</D>
</b>
Ночто я хочу получить в выводе:
<a>
<A>7</A>
<B>8</A>
<F>15</F>
<G>22</G>
</a>
<a>
<A>1</A>
<F>1</F>
</a>
<b>
<C>5</C>
<D>6</D>
</b>
я хочу, чтобы значение 'G' было напечатано в группе
Пожалуйста, кто-нибудь, помогите мне, заранее спасибо