欢迎来到小飞的博客

向前跑,迎着冷眼和嘲笑,生命的广阔不历经磨难怎能感到 命运它无法让我们跪地求饶 就算鲜血洒满了怀抱 继续跑 带着赤子的骄傲 生命的闪耀不坚持到底怎能看到 与其苟延残喘不如纵情燃烧吧。
扩大
缩小

【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)

 

posted on 2021-03-11 10:55  开发小飞  阅读(671)  评论(0编辑  收藏  举报

导航