2015-06-24 3 views
0

У меня возникла проблема с повторением списка, чтобы добавить элементы в список словарей. Я считаю, что моя проблема находится в функции list_to_dictionary. «для muns in mun» возвращает «Mun», который является элементом в списке. Он выполняет только итерацию через список один раз, потому что он говорит, что единственным элементом в списке является «Мун». Мне нужно создать словарь для каждого события. Не знаю, в чем проблема, спасибо.Невозможно перебирать список строк

#iterates though lists and puts value at location "count" 
#into a dictionary and loops until there are no more events 
def list_to_dictionary(): 
    count = 0 
    for muns in mun: 
     print muns 
     event = {'Agency ': agency[count], 'Time ': time[count], 'Units ': units[count], 'Description ': description[count], 'Street ': street[count], 'Cross Streets ': crossStreets[count], 'Municipality ': mun[count]} 
     count += 1 
     return event 

create_list(allTable) 
+0

Элиф счетчик 7: mun.extend ([row.text]) счетчик = 1 – NeonLights86

ответ

2

Во-первых, чтобы добавить элемент в список, вы должны использовать Append, не распространяются. Например. mun.append(row.text) вместо mun.extend([row.text])

Во-вторых, в вашей функции list_to_dictionary вы возвращаетесь в первую итерацию цикла, поэтому, конечно, он не будет перебирать весь список. Я предполагаю, что вы хотите вернуть список событий, а не первое событие.

В-третьих, вы должны упростить логику. Вместо того, чтобы создавать кучу списков, а затем использовать их индексы для создания словарей после этого, почему бы просто не создать словарь в первом цикле для каждого события и создать список событий.

events = [] 
    event = {} 
    counter = 1 
    for row in allTable.findAll('td'): 
     if counter is not 8: 
      if counter is 1: 
       event['agency'] = row.text 
       counter += 1 
      elif counter is 2: 
       event['time'] = row.text 
       counter += 1 

...

  elif counter is 7: 
       event['mun'] = row.text 
       events.append(event) 
       event = {} 
       counter = 1 
+0

я хотел это, но у меня возникла другая проблема после ее реализации. для e в событиях: print e возвращает тот же словарь снова и снова. – NeonLights86

+1

Извините, только что сделали изменения - вам нужно сбросить переменную вашего события, когда ваш счетчик достигнет 7 –

+0

Это замечательно, спасибо. – NeonLights86

3
return event 

находится внутри цикла, так что цикл останавливается на первой итерации.

Вы, вероятно, хотите, чтобы добавить событие в список словаря и вернуть список после цикла

def list_to_dictionary(): 
    count = 0 
    events = [] 
    for muns in mun: 
     print muns 
     event = {'Agency ': agency[count], 'Time ': time[count], 'Units ': units[count], 'Description ': description[count], 'Street ': street[count], 'Cross Streets ': crossStreets[count], 'Municipality ': mun[count]} 
     events.append(event) 
     count += 1 
    return events 
+0

вау спасибо, реверс один отступ установил ее :) – NeonLights86

Смежные вопросы