私はe
が1つのdictで、d
がもう1つdictのようなコードを持っています。毎回同じ関数内の同じコードを再帰的に呼び出す方法
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
辞書はrrr
キーを有しており、それはa
式値b+c
とb
と辞書e
内の1つの以上のキーが1以上である式値a+h
を有するように再帰関数であります式の値r+d
を持つdict e
のキー。そしてr
とd
の値はdict d
にあり、これを追加する必要があります。この値はrrr
,a
,b
ですが、正しく値が追加されないため、上記の再帰関数を使用しています。
は、上記の関数では、このコードは、この条件
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] # 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),
}
と呼ばれるようにしているが、両方のコードは、単一の関数であるが、私はそのコードを使用する方法を得ていないのです。..
最初のコードスニペットでは、 'e'に' rrr'の引用符がありませんでしたか? –
@JoachimPileborgが正しい。助けてください – user1182090
トピックオフ...しかし、単一の文字変数名は、限られた範囲と意味を持つ単純なオブジェクトに与えられるべきです。 – Simon