使用sort方法对列表内容进行排序
语法:
my_list = [['a', 23], ['c', 43], ['b', 34]]
def choose_sort_key(element):
return element[1]
my_list.sort(key=choose_sort_key, reverse=True)
print(my_list)
my_list.sort(key=lambda element: element[1], reverse=False)
print(my_list)
============================================
>>> [['c', 43], ['b', 34], ['a', 23]]
>>> [['a', 23], ['b', 34], ['c', 43]]
案例
案例需求:
数据格式:(包含1960-2019全球所有国家的gdp)
第一步:读取文件
逐行读取数据,以列表形式保存在data_lines
# 读取数据
f = open("***\\1960-2019全球GDP数据.csv", 'r', encoding="GB2312")
data_lines = f.readlines()
f.close()
第二步:数据处理
- 删除第一行
data_lines.pop(0)
- 将字典转换为字典存储:格式为:
- #{年份:[[国家1, GDP], [国家2, GDP], …], 年份:[[国家1, GDP], [国家2, GDP], …], …}
data_dict = {}
for line in data_lines:
year = int(line.split(',')[0])
country = line.split(",")[1]
gdp = float(line.split(",")[2])
👆遍历每一行,获取年份,国家,gdp
try:
data_dict[year].append([country, gdp])
except KeyError:
data_dict[year] = []
data_dict[year].append([country, gdp])
👆将数据添加到字典中
- 下一步按照gdp数值对数据排序,取出前八的数据内容
sorted_year = sorted(data_dict.keys())
for year in sorted_year:
data_dict[year].sort(key=lambda element: element[1], reverse=True)
# 取出前8
year_data = data_dict[year][0:8]
- 下一步,将国家和gdp封装到列表中,作为x,y坐标数值
x_data = []
y_data = []
for country_gdp in year_data:
x_data.append(country_gdp[0])
y_data.append(country_gdp[1]/100000000)
下一步,构建柱状图:
for循环每一年的数据,基于每一年的数据,创建每一年的bar对象
在for中,将每一年的bar对象添加到时间线中
bar = Bar()
x_data.reverse()
y_data.reverse()
bar.add_xaxis(x_data)
bar.add_yaxis('GDP(亿)', y_data, label_opts=LabelOpts(position='right'))
bar.reversal_axis()
# 设置每一年的图表标题
bar.set_global_opts(title_opts=TitleOpts(title=f'{year}年全球前八GDP数据'))
timeline.add(bar, str(year))
- 下一步设置自动播放,绘图
# 设置自动播放
timeline.add_schema(
play_interval=1000,
is_auto_play=True,
is_timeline_show=True,
is_loop_play=False
)
timeline.render('动态.html')
完整代码如下:
from pyecharts.charts import *
from pyecharts.options import *
# 读取数据
f = open('D:\Desktop\Dr\py-lesson\\1960-2019全球GDP数据.csv', 'r', encoding="GB2312")
data_line = f.readlines()
f.close()
# 去除首行
data_line.pop(0)
# print(data_line)
timeline = Timeline()
# 遍历数据并保存在字典中
data_dict = {}
for line in data_line:
year = int(line.split(',')[0])
country = line.split(',')[1]
gdp = float(line.split(',')[2])
try:
data_dict[year].append([country, gdp])
except KeyError:
data_dict[year] = []
data_dict[year].append([country, gdp])
# print(data_dict)
sorted_year = sorted(data_dict.keys())
# print(sorted_year)
for year in sorted_year:
data_dict[year].sort(key=lambda element: element[1], reverse=True)
year_data = data_dict[year][0:8]
x_data = []
y_data = []
# print(year_data)
for country_gdp in year_data:
x_data.append(country_gdp[0])
y_data.append(country_gdp[1]/100000000)
# 构建Bar对象
bar = Bar()
x_data.reverse()
y_data.reverse()
bar.add_xaxis(x_data)
bar.add_yaxis('GDP(亿)', y_data, label_opts=LabelOpts(position='right'))
bar.reversal_axis()
bar.set_global_opts(title_opts=TitleOpts(title=f'{year}年全球前八GDP数据'))
timeline.add(bar, str(year))
timeline.add_schema(
play_interval=3000,
is_loop_play=False,
is_timeline_show=True,
is_auto_play=True
)
timeline.render('dt.html')
最终在生成的dt.html文件中,通过浏览器打开图片