如何使用关系列表简化Python中的多个for语句

时间:2018-01-19 00:36:00

标签: python

我目前正在尝试简化下面的Python,因为我认为它可能非常低效,而且我的做法是错误的。使用SQL我只会使用一些连接,但我不确定如何在Python中进行简化。我正在使用一个政治家数据库,这些数据库是地区/成员/人(列表)的词典(立法机构),然后包含个人记录(词典)。对于每个国会选区,我想打印该区的名称,然后打印相应的代表。这些通过会员表链接。有没有更有效的方法来进行这种匹配?

for state in housedata['areas']:
    print(state['name'])
    for position in housedata['memberships']:
        if position['legislative_period_id'] == currentlegislature and state['id'] == position['area_id']:
            for person in housedata['persons']:
                if person['id'] == position['person_id']:
                    print(person['given_name'], person['family_name'])

1 个答案:

答案 0 :(得分:4)

使用字典查找替换搜索匹配元素的循环。在循环之前,构造由要匹配的属性键入的字典。

position_by_area = {}
for position in housedata['memberships']:
    if position['legislative_period_id'] == currentlegislature:
        position_by_area[position['area_id']] = position

person_by_id = {}
for person in housedata['persons']:
    person_by_id[person['id']] = person

for state in housedata['areas']:
    print(state['name'])
    position = position_by_area[state['id']]
    person = person_by_id[position['person_id']]
    print(person['given_name'], person['family_name'])

正如您所说,您的循环类似于数据库中的连接。这些字典类似于您在数据库中创建的用于优化连接的索引。