首页 > 解决方案 > 迭代从 MYSQL 生成的嵌套循环

问题描述

我正在尝试遍历来自 MYSQL 的生成列表,如下所示:

result8 =[('January', 'Alexandria ', 2),
          ('January', 'Cairo', 2), 
          ('February', 'Alexandria ', 1), 
          ('March', 'Cairo', 1), 
          ('March', 'Alexandria ', 1), 
          ('April', 'Upper Egypt', 1), 
          ('April', 'Alexandria ', 1), 
          ('May', 'Alexandria ', 1), 
          ('June', 'Delta ', 1), 
          ('June', 'Alexandria ', 1), 
          ('July', 'Giza', 1)]

首先,我尝试收集与同一个月相关的所有项目,就像在那之后绘制图表(matplotlib 中的堆积柱形图)

jan=['January']
feb=['February']
mar=['March']
apr=['April']
may=['May']
jun=['June']
july=['July']
aug=['August']
sept=['September']
october=['October']
nov=['November']
dec=['December']

我做了一个函数来迭代和附加不同的月份信息:

def seperated_month(j,month,my_list):
    for i in result8:
        if i[j] == month:
            my_list.append(i[1])
            my_list.append(i[2])

seperated_month(0, 'January', jan)
seperated_month(0, 'February', feb)
seperated_month(0, 'March', mar)
seperated_month(0, 'April', apr)
seperated_month(0, 'May', may)
seperated_month(0, 'June', jun)
seperated_month(0, 'July', july)
seperated_month(0, 'August', aug)
seperated_month(0, 'September', sept)
seperated_month(0, 'October', october)
seperated_month(0, 'November', nov)
seperated_month(0, 'December', dec)

这是 o/p :

['January', 'Alexandria ', 2, 'Cairo', 2]
['February', 'Alexandria ', 1]
['March', 'Alexandria ', 1, 'Cairo', 1]
['April', 'Upper Egypt', 1, 'Alexandria ', 1]
['May', 'Alexandria ', 1]
['June', 'Delta ', 1, 'Alexandria ', 1]
['July', 'Giza', 1]
['August']
['September']
['October']
['November']
['December']

现在应该收集 5 个列表信息:

alex =[]
cairo =[]
giza =[]
delta=[]
upper_egypt=[]

所以我收集了所有月份,开始迭代收集每个城市的信息:

all_list = [jan,feb,mar,apr,may,jun,july,aug,sept,october,nov,dec]

 for i in all_list:
     if all_list[i] == 'Cairo':
         cairo.append(all_list[i+1]))
     else:
         cairo.append(int(0))

以及我收集所有月份的原因,以便在 12 个月内进行迭代,如果没有数据,它将被零替换。

但我不能做那个迭代,因为 all_list 变成了“嵌套列表”,我不能迭代每个项目。如果我使用嵌套 for 循环,索引将多于或少于 12 个月,具体取决于数据 insdie 的长度。

我的要求:是遍历 all_list 并根据“城市名称”获取附加信息,例如最后:

cairo = [2,0,1,0,0,0,0,0,0,0,0,0]

感谢你的帮助 !

标签: pythonmysqlmatplotlibnested-loops

解决方案


您应该为此任务使用适当的容器和模块,而不是使用几十个变量。

我建议熊猫/ DataFrame

import pandas as pd
df = (pd.DataFrame(result8, columns=['month', 'city', 'value'])
        .pivot(index='month', columns='city', values='value')
     )
df.plot.bar(stacked=True)

输出:

month        April  February  January  July  June  March  May
city                                                         
Alexandria     1.0       1.0      2.0   NaN   1.0    1.0  1.0
Cairo          NaN       NaN      2.0   NaN   NaN    1.0  NaN
Delta          NaN       NaN      NaN   NaN   1.0    NaN  NaN
Giza           NaN       NaN      NaN   1.0   NaN    NaN  NaN
Upper Egypt    1.0       NaN      NaN   NaN   NaN    NaN  NaN

堆积条形图


推荐阅读