Ошибка при попытке доступа к значению dict - PullRequest
1 голос
/ 09 марта 2012

у меня есть 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", если ключ их, он принимает это значениеили он назначает значение по умолчанию, до этого его нормально работает.Но когда я пытаюсь создать dict, сравнивая список "a" с dict "d1", используя код x2 = dict ([(x, d1.get (x, 0) [3]) для x в a])

показывает тип: ошибка int объект не является субскрибутивным.я не знаю, но d2 [k] [3] имеет значение, но показывает ошибку.

Ответы [ 2 ]

0 голосов
/ 09 марта 2012
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]
0 голосов
/ 09 марта 2012

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

Это тоже немного легче читать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...