2012-03-09 6 views
1

にアクセスしようとしたとき、私はdictのタイプエラーdictの値

d1={'a':['in-gaap','inr',0,1],'b':['in-gaap','inr',0,2],'c':['in-ca','share',0,4],'n1':['','','','aaa']} 
    d2={'d':['in-gaap','inr',0,'a+b'],'e':['in-gaap','inr',0,'y+t']} 
    for k in d2.iterkeys(): 
     a=re.findall('\w+',d2[k][3]) 
     x2=dict([(x,d1.get(x,0)[3])for x in a]) # here its showing Type:error int obj not subscriptable 
     d1[k]=[d2[k][0],d2[k][1],d2[k][2],eval(d2[k][3],x2)] 

を持っている「」リストでは、動的に、それは「」 のD [中D [K] [3]及び格納を分割作成最初の反復でa = ['a'、 'b']、2回目の反復でa = ['y'、 't'] 実際にはdict "d1"キーがキーの場合はその値を取るか、デフォルト値を割り当てます。 しかし、リストを "a"とdict "d1"を使って比較すると、 x2 = dict([x、d1.get(x、0)[3]

これは型を表します:エラーintオブジェクトはサブオプションではありません。私は駄目ですが、d2 [k] [3]は値を持っていますがエラーを示しています。

+0

d1.get(X、0)[3]の問題はここにあるデフォルト値がどこにあるint型の[3]のインデックスを取得している理由の方法は...リストを返すされていません取得0? –

+1

@akhter wahab dict "d1"と表示された場合d1 = {'a':['in-gaap'、 'inr'、0,1] ....}私は "1 "インデックス3にあるので、d.get(x、0)[3]を使用しています。値がbalnkの場合、デフォルト値が割り当てられます。 – user1182090

答えて

0

d1.get(x,0)[3]。これがあなたの問題です。 xd1にない場合、d1.get(x,0)0を返します。 0[3]はTypeErrorです。

は、これらの行に問題の行を置き換え、それが動作するはずです、私が正しくあなたの意図を読ん仮定:

values = [d1[x][3] if x in d1 else 0 for x in a] 
x2 = dict(zip(a, values)) 

これはあまりにも読み取ることが少し簡単です。

+0

ありがとう@ aquavitae、私は私の問題の根本的な原因を得た私はこのコードを変更することができます – user1182090

+0

私は編集を投稿します – aquavitae

+0

ありがとう@ aquavitae、できるだけ早く投稿 – user1182090

0
import re 
d1={'a':['in-gaap','inr',0,1],'b':['in-gaap','inr',0,2],'c':['in-ca','share',0,4],'n1':['','','','aaa']} 
d2={'d':['in-gaap','inr',0,'a+b'],'e':['in-gaap','inr',0,'y+t']} 
for k in d2.iterkeys(): 
    a=re.findall('\w+',d2[k][3]) 
    print a 
    for x in a: 
     print 'x is :',x # at first iteration **x=='y'** so **d1.get(x,0)** will return **0** so you can't get **d1.get(x,0)[3]** 
     print d1.get(x,0) 

出力

['y', 't'] 
x is : y 
0 
x is : t 
0 
['a', 'b'] 
x is : a 
['in-gaap', 'inr', 0, 1] 
x is : b 
['in-gaap', 'inr', 0, 2]