2014-10-19 1 views
0

У меня есть объект JSON возвращается через запрос XHR, который принимает следующий формат:exceptions.TypeError: «поплавок» объект не итерацию с вложенного списка JSON

[[[13, u'Arsenal', [[[[u'goal', u'openplay', u'header', [1]], [u'goal', u'openplay', u'leftfoot', 
[1]], [u'goal', u'openplay', u'rightfoot', [3]], [u'goal', u'owngoal', u'rightfoot', [1]], [u'miss', 
u'corner', u'header', [2]], [u'miss', u'corner', u'leftfoot', [3]], [u'miss', u'corner', u'rightfoot', 
[2]], [u'miss', u'crossedfreekick', u'rightfoot', [2]], [u'miss', u'directfreekick', u'leftfoot', [1]], 
[u'miss', u'openplay', u'header', [2]], [u'miss', u'openplay', u'leftfoot', [16]], [u'miss', 
u'openplay', u'rightfoot', [23]]]]]] 

Где responser является объектом JSON выше, я использовал следующий код, чтобы преобразовать этот вложенный список в словарь Python с кортежами для словаря ключей:

for match in responser: 
        for num_events, team, events in match: 

         regex = {tuple(sub[:3]): sub[3][0] for y in events[0] for sub in y} 

Однако, когда я пытаюсь использовать один и тот же объект на вложенный ниже список:

[[[13, u'Arsenal', [[6.125, [[u'assist', u'cross', [3]], [u'normal', u'cross', [198]], [u'normal', 
u'longball', [326]], [u'assist', u'short', [5]], [u'normal', u'short', [4726]], [u'assist', 
u'throughball', [1]], [u'normal', u'throughball', [35]]]]]] 

Я получаю следующее сообщение об ошибке:

exceptions.TypeError: 'float' object is not iterable 

Может кто-нибудь сказать мне, что я делаю неправильно здесь? Я вижу, что список вложенных JSON во втором примере немного отличается по своей структуре с первым, но я не уверен, как изменить свой код для его соответствия, или, в частности, почему я получаю эту ошибку.

Благодаря

ответ

0

Это из-за стоимости 6.125: ваш код не учитывает это быть там. Также у каждого минилиста есть 2 предмета вместо 3, и код должен быть соответствующим образом скорректирован.

Единственный способ, которым я мог заставить его работать, - разбить его на кусочки. Вы не хотите, чтобы втиснуть слишком много вещей в списке/словарь понимание:

Это мой код для преобразования первого списка:

>>> d = {} 
>>> for a in responser[2][0][0]: 
... d.update({tuple(a[:3]): a[3][0]}) 

И это мой код, чтобы преобразовать второй список. «1» должен получить элемент после значения 6.125. И элементы «3» заменяются на «2»:

>>> d = {} 
>>> for a in responser[2][0][1]: 
... d.update({tuple(a[:2]): a[2][0]}) 
... 
+0

привет, спасибо, что ответили. этот ответ дает мне сообщение об ошибке, что индекс выходит за пределы допустимого диапазона. – gdogg371

+0

Обратите внимание, что я внесла поправки в свой ответ, так как мой объект json содержал опечатку, где в начале объекта не было достаточно скобок открытия. Я не уверен, что это повлияло бы на ваш ответ? – gdogg371

+0

hmm, на самом деле это работало для меня раньше, но теперь не хватает закрывающих скобок. Вы можете попробовать этот сайт, чтобы узнать, действительно ли это или нет. http://jsonformatter.curiousconcept.com/ (Удалите u, измените «на» и сначала удалите каретки). – twasbrillig