Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用关系列表简化Python中的多个for语句_Python - Fatal编程技术网

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

如何使用关系列表简化Python中的多个for语句,python,Python,我目前正在尝试简化下面的Python,因为我认为它可能非常低效,而且我做得不对。使用SQL我只会使用一些连接,但我不确定如何在Python中简化。我使用的是一个政客数据库,是地区/成员/个人(列表)的字典(立法机构),其中包含个人记录(字典)。对于每个国会选区,我想打印该选区的名称,然后打印相应的代表。它们通过memberships表链接。是否有更有效的方法进行匹配 for state in housedata['areas']: print(state['name']) for

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

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

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

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

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

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

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

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

看起来您需要重新设计数据结构。您需要将这些属性作为字典的键,而不是按属性搜索列表。您可以使用
函数式编程的原理来“展平”代码。尝试将所有这些操作简化为只执行一个操作的简单函数(不要忘记用有用的名称命名这些函数)。这样,您就可以将逻辑与执行分开。看起来您需要重新设计数据结构。您需要将这些属性作为字典的键,而不是按属性搜索列表。您可以使用
函数式编程的原理来“展平”代码。尝试将所有这些操作简化为只执行一个操作的简单函数(不要忘记用有用的名称命名这些函数)。这样,您就可以将逻辑与执行分开。