尝试访问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)]

"a"是一个动态创建的列表,它拆分d[k][3]并将其存储在"a"中d[k][3]在第一次迭代中包含a=[‘a’,‘b’],在第二次迭代中包括a=[’y’,’t’]事实上,我正在将列表"a"键和dict"d1"键进行比较,如果键是它们的,则取该值或指定默认值,直到它工作正常。但是,当我试图通过比较列表"a"和dict"d1"来创建dict时,使用代码x2=a中x的dict([(x,d1.get(x,0)[3])

它显示Type:error int对象不可分包。我没有y,但d2[k][3]有值,但它显示错误。

d1.get(x,0)[3]。这是你的问题。如果x不在d1中,则d1.get(x,0)返回00[3]是一个类型错误。

用这些行替换问题行,假设我正确阅读了你的意图,它应该会起作用:

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

这也稍微容易阅读。

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]

相关内容

最新更新