anexando com sucesso a uma lista de python
-
11-09-2019 - |
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 ??p>
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)
Solução
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']