Pergunta

Isto pode parecer como os mundos mais simples questão python ... Mas eu vou dar uma chance de explicá-lo.

Basicamente eu tenho que percorrer páginas de resultados JSON de uma consulta.

O resultado padrão é este

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

Eu preciso do loop para continuar a loop, acrescentando à lista na chave de resultado para um var que podem ser depois acessados ??e contou a quantidade de resultados dentro da lista. No entanto eu precisar dele para fazer um loop somente enquanto next_page existe como depois de um tempo, quando não há mais páginas a chave next_page é deixada cair a partir do dict.

Atualmente tenho esta

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)
Foi útil?

Solução

abordagem

Alternate (limpo), fazer uma lista grande:

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

Outras dicas

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

A lista é anexado como um efeito colateral da chamada de método. append() realmente retorna None, então new_result é agora uma referência para None.

Você quer usar

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

Se você insistir em fazê-lo dessa maneira. Como Bastien disse, result.append(whatever) == None

AFAICS, você não precisa do new_result variável em tudo.

result_count = len(result)

lhe dará a resposta que você precisa.

Você não pode anexar em um dict..you pode acrescentar à sua lista de dentro do seu dict, você deve fazer assim

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

Se você quiser verificar se não há nenhum valor seguinte página no seu dict resultado, e que deseja excluir a chave do dict, basta fazer como este

if not result['next_page']:
    del result['next_page']
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top