我目前正在尝试简化下面的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'])
答案 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'])
正如您所说,您的循环类似于数据库中的连接。这些字典类似于您在数据库中创建的用于优化连接的索引。