我有一个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)
返回0
。0[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]