2012-03-09 77 views
1

我有一个字典当类型错误试图访问字典值

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)] 

'a' 是一个列表动态创建它分裂d [k]的[3],并将其存储在 “一” d [ k] [3]在第一次迭代中包含a = ['a','b']并且在第二次迭代中a = ['y','t']其实,我正在比较列表“a”键和字典“d1”键如果键是他们它采取该值或分配默认值,直到这工作正常。 但是,当我尝试通过使用代码 比较列表“a”与字典“d1”创建字典x2 = dict([(x,d1.get(x,0)[3])for a])

它显示类型:错误int对象不subproptable。我dono y但d2 [k] [3]有价值,但它显示错误。

+0

d1.get(X,0)[3]问题是在这里获得方法没有返回列表..为什么你越来越[3]为int的索引,其中,默认值是0? – 2012-03-09 07:40:34

+1

@akhter wahab如果你看到字典“d1”他们我存储值列表d1 = {'a':['in-gaap','inr',0,1] ....}我需要得到“1 “这是在索引”3“,所以我使用d.get(x,0)[3],如果值是balnk,默认值将被分配。 – user1182090 2012-03-09 07:46:04

回答

0

d1.get(x,0)[3]。这是你的问题。如果x不在d1中,则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 2012-03-09 07:48:32

+0

我会发布编辑 – aquavitae 2012-03-09 08:00:02

+0

感谢@ aquavitae,尽快发帖 – user1182090 2012-03-09 08:02:10

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]