У меня есть такой код, где e
- это один диктант, а d
- еще один.
e = { 'rrr':
{ 'prefix' : 'inr',
'reference' : 'Inr',
'decimal' : 0,
'formula' : 'a+h',
'm' : '',
},
'a' :
{ 'prefix' : 'inr',
'reference' : 'Inr',
'decimal' : 0,
'formula' : 'b+c',
'm' : '',
},
'b' :
{ 'prefix' : 'inr',
'reference' : 'Inr',
'decimal' : 0,
'formula' : 'r+d',
'm' : 'm',
},
'h' :
{ 'prefix' : 'inr',
'reference' : 'Inr',
'decimal' : 0,
'formula' : 'b+y',
'm' : 'm',
}
}
d = { 'r':
{ 'prefix' : 'inr',
'reference' : 'Inr',
'decimal' : 0,
'curyear' : 1,
'prevyear' : 1,
},
'd' :
{ 'prefix' : 'inr',
'reference' : 'Inr',
'decimal' : 0,
'curyear' : 2,
'prevyear' : 3,
},
'c' :
{ 'prefix' : 'inr',
'reference' : 'Inr',
'decimal' : 0,
'curyear' : 4,
'prevyear' : 5,
}
}
for k,v in e.iteritems():
a = re.findall('\w+', e[k]['formula'])
for i in range(0, len(a)):
if not d.has_key(a[i]):
if e.has_key(a[i]):
getValue2(e, a[i])
getvalue2
- это рекурсивная функция, подобная этой
def getValue2(e, key):
b = re.findall('\w+', e[key]['formaula'])
if e.has_key(b[i]):
getValue2(e, key)
values = [d[x]['prevyear'] if x in d else 0 for x in a]
values1 = [d[x]['curyear'] if x in d else 0 for x in a]
x2 = dict(zip(a, values))
x3 = dict(zip(a, values1))
d[k] = {
'prefix' : e[k]['prefix'],
'reference' : e[k]['reference'],
'decimal' : e[k]['decimal'],
'prevyear' : eval(e[k]['formula'], x2),
'curyear' : eval(e[k]['formula'], x3),
}
e
dict имеет ключ rrr
и значение формулы a+h
, где a
- еще один ключ в dict e
со значением формулы b+c
, а b
- еще один ключ в dict e
со значением формулы r+d
.И значения r
и d
даны в dict d
, и мне нужно добавить это значение rrr
, a
, b
к dict, но значения не добавляются правильно, поэтому я использую приведенную выше рекурсивную функцию.
В приведенной выше функции этот код должен вызываться рекурсивно
values = [d[x]['prevyear'] if x in d else 0 for x in a] # I am checking if k in d store that value else 0
values1 = [d[x]['curyear'] if x in d else 0 for x in a]
x2 = dict(zip(b, values)) # I am creating dict of tag,values
x3 = dict(zip(b, values1))
d[k] = {
'prefix' : e[k]['prefix'],
'reference' : e[k]['reference'],
'decimal' : e[k]['decimal'],
'prevyear' : eval(e[k]['formula'], x2),
'curyear' : eval(e[k]['formula'], x3),
}
при этом условии
b = re.findall('\w+', e[key]['formaula'])
if e.has_key(b[i]):
getValue2(e, key)
Но оба кода в одной функции, но я не понимаю, какиспользовать этот код ...