无法遍历字符串列表

时间:2015-06-24 22:37:45

标签: python python-2.7

我在迭代列表以将项添加到词典列表时遇到问题。我相信我的问题在list_to_dictionary函数中。 "对于mun"返回" 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)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

首先,要将项添加到列表中,您应该使用append,而不是extend。例如。 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