Python数据过滤代码中指定索引行的功能咨询
代码中标注行的索引指向与功能解析
问题背景
尝试从指定输入文件过滤数据,但无法理解Python代码中标注#Line1、#Line2、#Line3的行里索引的具体指向及功能。
输入文件内容
Peter, Haddad, M, Dekweneh, 5100 Petra, Yahya, Haddad, F, Jbeil, 4321 Walid, Khaled, M, Beirut, 1726 Sako, Kazanjian, M, Ain Ebel, 1121 Patrick, Haddad, M, Dekweneh, 5100 Joseph, Yahya, M, Jounieh, 36 Zoulaykha, Haddad, F, Dekweneh, 5100 Marina, Saadeh, Haddad, F, Chwaifet, 1819 Rami, Saad, M, Jbeil, 4321 Bernard, Khaled, M, Beirut, 1726 Charbel, Kazanjian, M, Ain Ebel, 1121 Cynthia, Khaled, F, Beirut, 1726 Najib, Mansour, M, Beirut, 1726
待解析代码
for line in in_lines: first_name = line.strip().split(' , ')[0] if len(line.strip().split(', ')) == 5: reg_num = line.strip().split(', ')[4] reg_city= line.strip().split(', ')[3] last_name = line.strip().split(', ')[1] m_name= '' if line.strip().split(', ')[2] == 'F': err_file.write(line) elif len(line.strip().split(', ')) == 6: reg_num = line.strip().split(', ')[5] reg_city= line.strip().split(', ')[4] last_name = line.strip().split(', ')[1] m_name= line.strip().split(', ')[2] if reg_num not in dict_fam: dict_fam[reg_num] = [[first_name, last_name, m_name, reg_city]] else: if last_name == dict_fam[reg_num][0][1]: #Line 1 dict_fam[reg_num].append([first_name,last_name,m_name,reg_city]) else: err_file.write(line) items = dict_fam.items() for item in items: out_file.write(item[1][0][1] + ': ') #Line 2 for i in item[1]: out_file.write(i[0] + ', ') #Line 3 out_file.write('\n') print(dict_fam) in_file.close() out_file.close() err_file.close()
核心结构说明
先明确dict_fam的结构:这是一个按**注册编号reg_num**分组的字典,键是注册编号,值是一个列表——列表里的每个元素是一条成员信息的子列表,子列表格式为[名字, 姓氏, 中间名, 注册城市]。比如第一条数据处理后,dict_fam["5100"]的值为[["Peter", "Haddad", "", "Dekweneh"]]。
Line 1: if last_name == dict_fam[reg_num][0][1]:
- 索引指向拆解:
dict_fam[reg_num]:获取当前注册编号对应的所有成员信息列表[0]:取该列表里的第一条成员记录(最早加入的那条)[1]:从这条记录中提取姓氏(子列表的第2个元素是姓氏)
- 功能:判断当前数据的姓氏,和该注册编号下已存在的第一条记录的姓氏是否一致。逻辑上同一个注册编号应属于同一家族,一致则将当前记录加入列表;不一致则写入错误文件。
Line 2: out_file.write(item[1][0][1] + ': ')
- 索引指向拆解:
item是dict_fam.items()返回的键值对元组,格式为(注册编号, 成员信息列表)item[1]:取元组中的成员信息列表部分[0]:取该列表里的第一条成员记录[1]:提取这条记录里的姓氏
- 功能:向输出文件写入当前注册编号对应的家族姓氏,作为该组记录的标题(比如
Haddad:)。
Line 3: out_file.write(i[0] + ', ')
- 索引指向拆解:
i是遍历成员信息列表时的每条子记录,格式为[名字, 姓氏, 中间名, 注册城市][0]:提取该子记录里的名字(子列表的第1个元素)
- 功能:遍历当前注册编号下的所有成员,把每个成员的名字写入输出文件,用逗号分隔(比如
Peter, Patrick, Zoulaykha,)。
内容的提问来源于stack exchange,提问作者MD500000
相关产品推荐
相关产品推荐

