# 中国城市排行榜
import xlrd
book=xlrd.open_workbook('city_data.xls')
sheet=book.sheet_by_index(0)
main_data_list=[]
for row in range(3,sheet.nrows):temp_dict={}# print(sheet.row_values(row))temp_dict["城市"]=sheet.row_values(row)[0]temp_dict["2019GDP"] = sheet.row_values(row)[1]temp_dict["2018总人口"] = sheet.row_values(row)[2]temp_dict["2018平均房价"] = sheet.row_values(row)[3]temp_dict["2018平均工资"] = sheet.row_values(row)[4]temp_dict["地铁总里程"] = sheet.row_values(row)[5]temp_dict["高效数量"] = sheet.row_values(row)[6]temp_dict["三甲医院"] = sheet.row_values(row)[7]temp_dict["小学数量"] = sheet.row_values(row)[8]main_data_list.append(temp_dict)# print(main_data_dic)
for i_list in range(len(main_data_list)):main_data_list[i_list]['原榜单得分']=len(main_data_list)-i_list
print("城市原榜得分从高到低:")
for j_list in range(len(main_data_list)):print(main_data_list[j_list]["城市"],main_data_list[j_list]['原榜单得分'])
print('='*80)for i in range(len(main_data_list)):main_data_list[i]['收入房价比']=format(main_data_list[i]['2018平均工资']/12/main_data_list[i]['2018平均房价'],'.2f')
print(main_data_list)#从字典中取出K这个key的值函数
def get_value(dic,k):return dic.get(k)def desc_cities(cities_list,kw="2019GDP"):if kw!="2018平均房价":cities_bykey=sorted(cities_list,key=lambda x:get_value(x,kw),reverse=True)for i_key in range(len(cities_bykey)):cities_bykey[i_key][kw+"得分"]=len(cities_bykey)-i_keyprint(cities_bykey)print(f'城市{kw}得分(由高到低):')for j_key in range(len(cities_bykey)):print(cities_bykey[j_key]["城市"],cities_bykey[j_key][kw+"得分"])print('='*80)else:cities_bykey = sorted(cities_list, key=lambda x: get_value(x, kw), reverse=True)for i_house in range(len(cities_bykey)):cities_bykey[i_house][kw+"得分"]=i_house+1print(f'城市{kw}得分(由低到高):')for j_house in range(len(cities_bykey)):print(cities_bykey[j_house]["城市"],cities_bykey[j_house][kw+"得分"])print('='*80)return cities_bykey
desc_cities(main_data_list,kw="2018平均房价")
结果如下:
城市原榜得分从高到低:
北京 10
上海 9
深圳 8
广州 7
成都 6
重庆 5
杭州 4
武汉 3
西安 2
天津 1
================================================================================
[{'城市': '北京', '2019GDP': 35371.28, '2018总人口': 1375.8, '2018平均房价': 37420.19, '2018平均工资': 145766.0, '地铁总里程': 699.3, '高效数量': 116.0, '三甲医院': 78.0, '小学数量': 91.3, '原榜单得分': 10, '收入房价比': '0.32'}, {'城市': '上海', '2019GDP': 38155.32, '2018总人口': 1462.38, '2018平均房价': 28981.11, '2018平均工资': 140400.0, '地铁总里程': 705.0, '高效数量': 78.0, '三甲医院': 66.0, '小学数量': 80.02, '原榜单得分': 9, '收入房价比': '0.40'}, {'城市': '深圳', '2019GDP': 26927.09, '2018总人口': 454.7, '2018平均房价': 55441.01, '2018平均工资': 111709.0, '地铁总里程': 303.4, '高效数量': 8.0, '三甲医院': 16.0, '小学数量': 102.8, '原榜单得分': 8, '收入房价比': '0.17'}, {'城市': '广州', '2019GDP': 23628.6, '2018总人口': 927.69, '2018平均房价': 21581.78, '2018平均工资': 111839.0, '地铁总里程': 513.0, '高效数量': 91.0, '三甲医院': 62.0, '小学数量': 105.85, '原榜单得分': 7, '收入房价比': '0.43'}, {'城市': '成都', '2019GDP': 17012.65, '2018总人口': 1476.05, '2018平均房价': 9783.16, '2018平均工资': 88011.0, '地铁总里程': 302.285, '高效数量': 68.0, '三甲医院': 29.0, '小学数量': 94.2, '原榜单得分': 6, '收入房价比': '0.75'}, {'城市': '重庆', '2019GDP': 23605.77, '2018总人口': 1962.66, '2018平均房价': 8189.98, '2018平均工资': 78928.0, '地铁总里程': 313.6, '高效数量': 69.0, '三甲医院': 27.0, '小学数量': 126.15, '原榜单得分': 5, '收入房价比': '0.80'}, {'城市': '杭州', '2019GDP': 15373.0, '2018总人口': 774.1, '2018平均房价': 24360.2, '2018平均工资': 106709.0, '地铁总里程': 135.36, '高效数量': 46.0, '三甲医院': 20.0, '小学数量': 59.1, '原榜单得分': 4, '收入房价比': '0.37'}, {'城市': '武汉', '2019GDP': 17157.0, '2018总人口': 883.73, '2018平均房价': 12678.48, '2018平均工资': 88327.0, '地铁总里程': 339.0, '高效数量': 90.0, '三甲医院': 36.0, '小学数量': 57.9, '原榜单得分': 3, '收入房价比': '0.58'}, {'城市': '西安', '2019GDP': 9321.19, '2018总人口': 986.87, '2018平均房价': 9984.54, '2018平均工资': 87125.0, '地铁总里程': 155.66, '高效数量': 75.0, '三甲医院': 41.0, '小学数量': 73.09, '原榜单得分': 2, '收入房价比': '0.73'}, {'城市': '天津', '2019GDP': 14104.28, '2018总人口': 1081.63, '2018平均房价': 15924.26, '2018平均工资': 100731.0, '地铁总里程': 233.0, '高效数量': 71.0, '三甲医院': 49.0, '小学数量': 67.32, '原榜单得分': 1, '收入房价比': '0.53'}]
城市2018平均房价得分(由低到高):
深圳 1
北京 2
上海 3
杭州 4
广州 5
天津 6
武汉 7
西安 8
成都 9
重庆 10
================================================================================