Python如何通过flat_type2列表映射户型值完成循环列表输出
户型数值编码映射实现方案
核心实现逻辑
- 首先修复原代码
flat_type2列表的语法错误:原代码[5,'5 room'位置缺失闭合方括号与分隔逗号,运行会直接抛出语法异常。 - 把存储编码-名称对应关系的
flat_type2列表转换为字典结构,键存户型数值编码,值存对应户型字符串,查找效率远高于遍历列表匹配。 - 组装
dlist数据时,不再直接存入row[1]的数值编码,而是用编码作为键从映射字典中取出对应的户型名称存入,其余城镇、剩余租约、转售价格字段保持原有逻辑不变。 - 输出打印逻辑无需额外修改,直接读取dlist里已经替换好的户型字符串即可。
修正后完整代码
import numpy as np def trans_closeTo(): header=['Town', 'Flat Type', 'Remaining Lease', 'Resale Price'] price=int(input('Enter resale price amount:')) # 修复原列表语法错误,同时直接转为映射字典 flat_type_map = { 2:'2 room', 3:'3 room', 4:'4 room', 5:'5 room', 6:'Executive', 7:'Multi generation' } print() print(f'{header[0]:<15} {header[1]:<15}{header[-2]:<20}{header[-1]}') data2= open('ASG1_data_dictionary.csv') data3= data2.readlines() dlist=[] for row in data: if price*0.95 <= row [8] <= price*1.05: whole_row=data3[int(row[0])].split(',') # 此处替换原row[1]数值为映射后的户型名称 flat_name = flat_type_map[row[1]] dlist.append([whole_row[0], flat_name, row[7],row[8]]) for town,flat,lease,resale in dlist: print(f'{town.capitalize():<15} {flat:<15}{int(lease):<20}{resale:.2f}') trans_closeTo()
注:如果担心数据里存在未收录的户型编码导致KeyError,可以把取映射的代码改成
flat_type_map.get(row[1], 'Unknown'),遇到未匹配编码时会显示Unknown不会中断程序。
内容的提问来源于stack exchange,提问作者Jocelin Poh
相关产品推荐
相关产品推荐

