【Python学习】用Python处理计算城市的排行榜
计算城市排行版
1 #!/usr/bin/env python 2 # -*- encoding: utf-8 -*- 3 4 # 读Excel表格 5 import xlrd 6 book = xlrd.open_workbook(r'E:\109-业余学习内容\13-python学习\vscdoe学习\函数\city_data.xls') # 双击打开Excel文件(要用绝对路径?) 7 sheet = book.sheet_by_index(0) # 点击打开需要编辑的数据sheet 8 9 main_data_list = [] 10 11 for row in range(3,sheet.nrows): 12 temp_dict={} # 临时的字典 13 # print(sheet.row_values(row)) #读取整行的数据 14 15 temp_dict['城市']=sheet.row_values(row)[0] 16 temp_dict['2019GDP']=sheet.row_values(row)[1] 17 temp_dict['2018总人口']=sheet.row_values(row)[2] 18 temp_dict['2018平均房价']=sheet.row_values(row)[3] 19 temp_dict['2018平均工资']=sheet.row_values(row)[4] 20 temp_dict['地铁总里程数']=sheet.row_values(row)[5] 21 temp_dict['高校数量']=sheet.row_values(row)[6] 22 temp_dict['三甲医院数量']=sheet.row_values(row)[7] 23 temp_dict['2018小学生数量']=sheet.row_values(row)[8] 24 25 main_data_list.append(temp_dict) 26 # print(main_data_list) 27 28 len(main_data_list) 29 # print(len(main_data_list)) 30 31 # 添加原榜单得分的字段 32 for i_list in range(len(main_data_list)): 33 main_data_list[i_list]['原榜单得分']=len(main_data_list)-i_list # 得分刚好等于 列表长度-下标 34 35 # print('城市原榜单得分:(由高到低)') 36 # for j_list in range(len(main_data_list)): 37 # print(main_data_list[j_list]['城市'],main_data_list[j_list]['原榜单得分']) 38 # print('_'* 60) 39 # print(main_data_list) 40 41 # 计算每个城市的收入房价比,精确到小数点2位,添加新的字段 42 for i in range(len(main_data_list)): 43 # format的直接使用和占位的使用? 44 main_data_list[i]['收入房价比'] = format(main_data_list[i]['2018平均工资']/12/main_data_list[i]['2018平均房价'],'.2f') 45 46 # 更新数据 47 print(main_data_list) 48 49 # 开始逻辑判断:得分 50 51 # 定义从字典中根据‘k’取‘k’对应的值 52 def get_values(dic,k): 53 return dic.get(k) 54 55 # 做一个高复用的判断函数,支持升序和降序 56 def desc_cities(cites_list,kw='2019GDP'): 57 ''' 58 cites_list:用于排序的表格 59 kw:判断取值所用的关键字 60 ''' 61 if kw!='2018平均房价': 62 #---------------------先排序-----------------------# 63 cities_by_key=sorted(cites_list,key=lambda x :get_values(x,kw),reverse=True) 64 65 #---------------------再打分-----------------------# 66 for i_key in range(len(cities_by_key)): 67 cities_by_key[i_key][kw+'得分']= len(cities_by_key)-i_key 68 69 # 打印每个城市所选key的得分 70 print(f'城市{kw}得分(由高到低):') # 这个提示信息是什么意思?占位符的使用? 71 for j_key in range(len(cities_by_key)): 72 print(cities_by_key[j_key]['城市'],cities_by_key[j_key][kw+'得分']) 73 print('-'*80) 74 else: # 2018房价评分 75 cities_by_key=sorted(cites_list,key=lambda x:get_values(x,kw)) 76 for i_house in range(len(cities_by_key)): 77 cities_by_key[i_house][kw+'得分']=i_house + 1 78 79 # 打印每个城市"2018平均房价"的得分 80 print(f'城市{kw}得分(由低到高):') # 这个提示信息是什么意思?占位符的使用? 81 for j_house in range(len(cities_by_key)): 82 print(cities_by_key[j_house]['城市'],cities_by_key[j_house][kw+'得分']) 83 print('-'*80) 84 85 return cities_by_key 86 87 # ---批量调用函数-----# 88 desc_cities(main_data_list,'2019GDP') 89 desc_cities(main_data_list,'2018总人口') 90 desc_cities(main_data_list,'2018平均房价') 91 desc_cities(main_data_list,'2018平均工资') 92 desc_cities(main_data_list,'地铁总里程数') 93 desc_cities(main_data_list,'高校数量') 94 desc_cities(main_data_list,'三甲医院数量') 95 cities_by_key = desc_cities(main_data_list,'2018小学生数量') 96 97 # 计算城市总得分 98 for i_city in range(len(cities_by_key)): 99 cities_by_key[i_city]['城市总得分'] = format(cities_by_key[i_city]['2019GDP']+cities_by_key[i_city]['2018总人口']+cities_by_key[i_city]['2018平均房价']+cities_by_key[i_city]['2018平均工资']+cities_by_key[i_city]['地铁总里程数']+cities_by_key[i_city]['高校数量']+cities_by_key[i_city]['三甲医院数量']+cities_by_key[i_city]['2018小学生数量'],'.2f') 100 101 # 打印cities_by_key 102 print('打印cities_by_key') 103 print(cities_by_key) 104 print('-'*80) 105 106 # 打印原榜单的得分 107 print('打印原榜单的得分') 108 for j_city in range(len(cities_by_key)): 109 print(cities_by_key[j_city]['城市'],cities_by_key[j_city]['原榜单得分']) 110 print('-'*80) 111 112 # 城市总得分排序 113 cities_by_score = sorted(cities_by_key,key=lambda x:get_values(x,'城市总得分'),reverse=True) 114 115 # 打印总得分 116 print('打印总得分') 117 for g_city in range(len(cities_by_score)): 118 print(cities_by_score[g_city]['城市'],cities_by_score[g_city]['城市总得分']) 119 print('-'*80)
作者:小飞
备注:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
备注:部分图片下载来源于网络,如若有侵权,请联系本人予以删除,邮箱:2777418194@qq.com。
本博客作为本人软件学习记录而用,不提供任何软件的下载链接,敬请谅解
可关注本人微信公众号【软件开发部门】回复“资源”获取部分免费资源