尝试访问dict值时键入错误

时间:2012-03-09 07:30:33

标签: python dictionary

我有一个词典

  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]并将其存储在“a”中 d [k] [3]在第一次迭代中包含a = ['a','b'],在第二次迭代中a = ['y','t'] 实际上我正在将列表“a”键与dict“d1”键进行比较,如果键是它们需要该值或它指定默认值,直到它工作正常。 但是当我尝试通过使用代码将列表“a”与字典“d1”进行比较来创建dict时     x2 = dict([(x,d1.get(x,0)[3])对于a中的x)

它显示Type:error int object not subsricptable。我不知道,但d2 [k] [3]有价值,但显示错误。

2 个答案:

答案 0 :(得分:0)

d1.get(x,0)[3]。这是你的问题。如果x不在d1d1.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))

这也稍微容易阅读。

答案 1 :(得分: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]