如何使用关系列表简化Python中的多个for语句
我目前正在尝试简化下面的Python,因为我认为它可能非常低效,而且我做得不对。使用SQL我只会使用一些连接,但我不确定如何在Python中简化。我使用的是一个政客数据库,是地区/成员/个人(列表)的字典(立法机构),其中包含个人记录(字典)。对于每个国会选区,我想打印该选区的名称,然后打印相应的代表。它们通过memberships表链接。是否有更有效的方法进行匹配如何使用关系列表简化Python中的多个for语句,python,Python,我目前正在尝试简化下面的Python,因为我认为它可能非常低效,而且我做得不对。使用SQL我只会使用一些连接,但我不确定如何在Python中简化。我使用的是一个政客数据库,是地区/成员/个人(列表)的字典(立法机构),其中包含个人记录(字典)。对于每个国会选区,我想打印该选区的名称,然后打印相应的代表。它们通过memberships表链接。是否有更有效的方法进行匹配 for state in housedata['areas']: print(state['name']) for
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'])
正如您所说,您的循环类似于数据库中的连接。这些字典类似于您将在数据库中创建的索引,以优化联接。看起来您需要重新设计数据结构。您需要将这些属性作为字典的键,而不是按属性搜索列表。您可以使用
函数式编程的原理来“展平”代码。尝试将所有这些操作简化为只执行一个操作的简单函数(不要忘记用有用的名称命名这些函数)。这样,您就可以将逻辑与执行分开。看起来您需要重新设计数据结构。您需要将这些属性作为字典的键,而不是按属性搜索列表。您可以使用函数式编程的原理来“展平”代码。尝试将所有这些操作简化为只执行一个操作的简单函数(不要忘记用有用的名称命名这些函数)。这样,您就可以将逻辑与执行分开。