Вопрос

Это может показаться самым простым в мире вопросом python...Но я собираюсь попытаться объяснить это.

По сути, мне приходится перебирать страницы результатов запроса в формате json.

стандартный результат таков

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

Мне нужно, чтобы цикл продолжал выполняться, добавляя список в ключе результата к переменной, к которой позже можно получить доступ и подсчитать количество результатов в списке.Однако я требую, чтобы он выполнял цикл только пока существует next_page, так как через некоторое время, когда страниц больше нет, ключ next_page удаляется из dict.

в настоящее время у меня есть это

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)
Это было полезно?

Решение

Альтернативный (более чистый) подход, составление одного большого списка:

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

Другие советы

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

Список добавляется как побочный эффект вызова метода.append() на самом деле возвращает None, так что new_result теперь это ссылка на None.

Вы хотите использовать

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

если вы настаиваете на том, чтобы делать это именно так.Как сказал Бастьен, result.append(whatever) == None

AFAICS, вам вообще не нужна переменная new_result .

result_count = len(result)

даст вам ответ, который вам нужен.

вы не можете добавить в dict..вы можете добавить в свой список внутри своего dict, вы должны сделать вот так

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

если вы хотите проверить, нет ли значения next page в вашем результирующем dict, и вы хотите удалить ключ из dict, просто сделайте вот так

if not result['next_page']:
    del result['next_page']
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top