2009-11-01 5 views
0

Cela peut sembler être la question la plus simple du monde en python ... Mais je vais essayer de l'expliquer.s'inscrire avec succès à une liste python

Fondamentalement, je dois parcourir les pages de résultats JSON à partir d'une requête.

le résultat standard est ce

{'result': [{result 1}, {result 2}], 'next_page': '2'} 

J'ai besoin de la boucle pour continuer à boucle, annexant la liste dans la clé de résultat à une variable qui peut être plus tard accessible et compté le nombre de résultats dans la liste. Cependant, je n'ai besoin que de faire une boucle seulement quand next_page existe car après un moment où il n'y a plus de pages, la touche next_page est supprimée de la dict.

actuellement i ont cette

next_page = True 
while next_page == True: 
    try: 
     next_page_result = get_results['next_page'] # this gets the next page 
     next_url = urllib2.urlopen("http://search.twitter.com/search.json" + next_page_result)# this opens the next page 
     json_loop = simplejson.load(next_url) # this puts the results into json 
     new_result = result.append(json_loop['results']) # this grabs the result and "should" put it into the list 
    except KeyError: 
     next_page = False 
     result_count = len(new_result) 
+1

Où il est dit next_page == False, il devrait probablement dire next_page = False. Vous attribuez, pas en vérifiant l'égalité. –

+0

bien repéré .. j'ai édité cela maintenant ... merci de le signaler –

+1

'foo == True' est orthographié' foo'. –

Répondre

4

autre approche (nettoyant), ce qui rend une grande liste:

results = [] 
res = { "next_page": "magic_token_to_get_first_page" } 
while "next_page" in res: 
    fp = urllib2.urlopen("http://search.twitter.com/search.json" + res["next_page"]) 
    res = simplejson.load(fp) 
    fp.close() 
    results.extend(res["results"]) 
2
new_result = result.append(json_loop['results']) 

La liste est jointe en un effet secondaire de l'appel de méthode. append() renvoie en réalité None, donc new_result est maintenant une référence à None.

+0

ok alors comment pourrais-je contourner cela? –

+1

Pourquoi êtes-vous downvoted? Vous avez absolument raison. –

+1

@Neil Hickman: Vous ne "contournez pas" le résultat des mises à jour result.append.Il a la nouvelle valeur Vous pouvez dire 'new_result = result' si vous pensez que cela aide, mais' result' est mis à jour par ' append.Il n'y a pas de valeur de retour: une nouvelle liste est * not * créée. –

1

Vous voulez utiliser

result.append(json_loop['results']) # this grabs the result and "should" put it into the list 
new_result = result 

si vous insistez pour le faire de cette façon. Comme Bastien l'a dit, result.append(whatever) == None

0

AFAICS, vous n'avez pas du tout besoin de la variable new_result.

result_count = len(result) 

vous donnera la réponse dont vous avez besoin.

0

vous ne pouvez pas ajouter dans un dict..you peut ajouter dans votre liste à l'intérieur de votre dict, vous devriez faire comme ce

result['result'].append(json_loop['results']) 

si vous voulez vérifier s'il n'y a pas de valeur de la page suivante dans votre résultat dict, et que vous voulez supprimer la clé de la dict, faites comme ça

if not result['next_page']: 
    del result['next_page'] 
Questions connexes