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]有价值,但显示错误。
答案 0 :(得分: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))
这也稍微容易阅读。
答案 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]