2013-10-11 2 views
0

Я получаю результаты от внешнего API в качестве словаря в формате:Как преобразовать этот словарь в python?

{data:[{values:[{'end_time':'2013-10-03T07:00:00+0000', value:{'mobile':4, 'search':3}}, {'end_time':'2013-10-04T07:00:00+0000', value:{'source':2}}]}]}

, и я хочу, чтобы превратить его в словарь в формате:

{'2013-10-03T07:00:00+0000':{'mobile':4, 'search':3},'2013-10-04T07:00:00+0000':{'source':2}}

Когда Я пробую следующее: я получаю ошибку SyntaxError: keyword can't be an expression для линии, начинающейся с output_dict:

def dict_cleaner(input_dict): 
    for day in input_dict['data'][0]['values'][0]['end_time']: 
     output_dict = dict(input_dict['data'][0]['values'][0]['end_time']=input_dict['data'][0]['values'][0]['value']) 
    return output_dict 

Что я здесь делаю неправильно?

+2

На третьей строке, внутри вызова 'dict', Вы писали 'input_dict [ 'данные'] [0] [ 'значения'] [0] [ 'END_TIME'] = input_dict [ 'данные'] [0] [ 'значения'] [0] [ 'значение'] '. Что это должно значить? Я не думаю, что Python нравится, что там есть знак равенства. – Kevin

+0

Я пытался создать и обновить словарь, используя dict (key = value). Может быть, проблема в том, что если я зацикливаюсь на этом словаре, он задыхается, когда пытается добавить второе значение, поэтому, возможно, я должен сначала выполнить output_dict = dict(), а затем output_dict.update = dict (key = value). Но да, теперь, когда я смотрю на это, ты совершенно прав, мне даже не нужен этот цикл. –

+0

'update', вероятно, хорошая идея, хотя' output_dict.update = ... 'не имеет особого смысла. 'update' - это метод, поэтому вы должны вызывать его с помощью круглых скобок, а не присваивать ему, используя equals. – Kevin

ответ

1

@Kevin является правильным. Если вы пытаетесь создать Dict почему бы не просто сделать

{input_dict['data'][0]['values'][0]['end_time']: input_dict['data'][0]['values'][0]['value']} 

также, вы можете попробовать понимание вместо зацикливания

output_dict = {d['end_time']: d['value'] for d in input_dict['data'][0]['values']} 
+0

работает отлично. благодаря! –

Смежные вопросы