2013-10-11 2 views
0

Je reçois les résultats d'une API externe comme un dictionnaire dans le format:Comment transformer ce dictionnaire en 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}}]}]}

et je veux le transformer en un dictionnaire avec le format:

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

Lorsque J'essaie ce qui suit, je reçois l'erreur SyntaxError: keyword can't be an expression pour la ligne commençant par 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 

Qu'est-ce que je fais mal ici?

+2

Sur la troisième ligne, à l'intérieur de l'appel à 'dict', vous avez écrit 'input_dict ['data'] [0] ['values'] [0] ['end_time'] = input_dict ['data'] [0] ['values'] [0] ['valeur']'. Qu'est-ce que c'est censé vouloir dire? Je ne pense pas que Python aime qu'il y ait un signe égal dedans. – Kevin

+0

J'essayais à la fois de créer et de mettre à jour un dictionnaire en utilisant dict (clé = valeur). Peut-être que le problème est que si je parcours ce dictionnaire, il s'étouffe quand il essaie d'ajouter la deuxième valeur, donc peut-être que je devrais faire d'abord output_dict = dict() et ensuite output_dict.update = dict (key = value). Mais oui, maintenant que je le regarde, tu as totalement raison, je n'ai même pas besoin de ça pour la boucle. –

+0

'update' est probablement une bonne idée, bien que' output_dict.update = ... 'n'a pas trop de sens. 'update' est une méthode, vous devriez donc l'appeler en utilisant des parenthèses, ne pas l'assigner en utilisant égal. – Kevin

Répondre

1

@Kevin a raison. Si vous essayez de créer un dict pourquoi ne pas simplement faire

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

aussi, vous pouvez essayer la compréhension au lieu de boucle

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

fonctionne parfaitement. Merci! –

Questions connexes