2009-11-01 2 views
0

Это может показаться простейшим вопросом python в мире ... Но я собираюсь дать ему объяснение.успешно присоединяется к списку 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) 
+1

Где он говорит next_page == Ложно, вероятно, следует сказать next_page = False. Вы назначаете, а не проверяете равенство. –

+0

хорошо замечен .. я отредактировал это сейчас ... спасибо за указание, что вне –

+1

'foo == True' написано' foo'. –

ответ

4

Alternate (уборщик) подход, делая один большой список:

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

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

+0

ОК, так как бы я работал вокруг этого? –

+1

Почему вы занижены? Вы абсолютно правы. –

+1

@Neil Hickman: вы не «обходите это». Результат result.append обновляется, он имеет новое значение. Вы можете сказать 'new_result = result', если вы думаете, что это помогает, но' result' обновляется ' append'. Нет возвращаемого значения: новый список * не * создан. –

1

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

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

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

0

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

result_count = len(result) 

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

0

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

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

если вы хотите проверить, если нет следующего значения страницы в результирующем Dict, и вы хотите удалить ключ из Словаря, просто сделать как этот

if not result['next_page']: 
    del result['next_page'] 
Смежные вопросы