Python 通过for循环(?)创建字典

Python 通过for循环(?)创建字典,python,pandas,loops,for-loop,Python,Pandas,Loops,For Loop,我必须为我的测量数据创建一个大字典。 到目前为止,我的(简化)代码如下所示: i=0 对于范围内的i(len(站点数据文件)):#范围(0299) 车站数据熊猫=车站数据熊猫[i] 车站id=str(int(车站数据)[“车站id”][0])) Y_RR=站点数据_f_pandas[“MO_RR”]。重新采样(“A”)。应用(非常总和) #正在为此词典中的年度数据创建词典层 年度数据={ “Y_-RR”:Y_-RR } #为此字典中的montly数据创建字典层 每月数据={ “莫乌日” } #为

我必须为我的测量数据创建一个大字典。 到目前为止,我的(简化)代码如下所示:

i=0
对于范围内的i(len(站点数据文件)):#范围(0299)
车站数据熊猫=车站数据熊猫[i]
车站id=str(int(车站数据)[“车站id”][0]))
Y_RR=站点数据_f_pandas[“MO_RR”]。重新采样(“A”)。应用(非常总和)
#正在为此词典中的年度数据创建词典层
年度数据={
“Y_-RR”:Y_-RR
}
#为此字典中的montly数据创建字典层
每月数据={
“莫乌日”
}
#为每个站点创建字典层。每个月都有每月和每年的数据
车站={
“montly_数据”:montly_数据,
“年度数据”:年度数据
}
#创建字典层,station id可以在其中调用staiondata
车站数据dic={
车站id:车站
}
#创建字典的最后一层
站点数据字典={
“车站数据”:车站数据
}    
这是输出:

station_data_dictionary
Out[387]: 
{'station_data': {'4706': {'montly_data': {'MO_RR'},   # "4706" is the id from the last element in station_data_files_pandas
   'anual_data': {'Y_RR': YearMonth
           # YearMonth is the index...
           # I actually wanted the Index just to show yyyy-mm ...
    1981-12-31    1164.3
    1982-12-31     852.4
    1983-12-31     826.5
    1984-12-31     798.8
    1985-12-31       NaN
    1986-12-31       NaN
    1987-12-31       NaN
    1988-12-31       NaN
    1989-12-31       NaN
    1990-12-31    1101.1
    1991-12-31     892.4
    1992-12-31     802.1
    1993-12-31     873.5
    1994-12-31     842.7
    1995-12-31     962.0
    1996-12-31       NaN
    1997-12-31     927.9
    1998-12-31       NaN
    1999-12-31       NaN
    2000-12-31     997.8
    2001-12-31     986.3
    2002-12-31    1117.6
    2003-12-31     690.8
    2004-12-31       NaN
    2005-12-31       NaN
    2006-12-31       NaN
    2007-12-31       NaN
    2008-12-31       NaN
    2009-12-31       NaN
    2010-12-31       NaN
    Freq: A-DEC, Name: MO_RR, dtype: float64}}}}
正如您所见,我的输出仅由一张“表”组成。预计将有300张

我假设我的代码在数据循环时覆盖了它,因此在最后,我的输出只是由station_data_files_文件中的最后一个元素生成的一张纸。我怎样才能解决这个问题?我的方法可能完全错了吗

当它准备好时,它必须看起来像:

station_data_dictionary["station_data"]["403"]["anual_data"]["Y_RR"]
station_data_dictionary["station_data"]["573"]["anual_data"]["Y_RR"]
station_data_dictionary["station_data"]["96"]["anual_data"]["Y_RR"]
……等等

正如你所看到的,唯一允许我改变的东西,正如我在字典中称之为不同的东西一样,就是我的身份证


注意:有一个问题的标题完全相同,但对我一点帮助都没有……

我没有测试这个问题,因为我没有你的数据,但这应该会生成你所需的词典。唯一的变化是在顶部和底部:

站点数据字典={
“台站数据”:{}
}
对于范围内的i(len(站点数据文件)):#范围(0299)
车站数据熊猫=车站数据熊猫[i]
车站id=str(int(车站数据)[“车站id”][0]))
Y_RR=站点数据_f_pandas[“MO_RR”]。重新采样(“A”)。应用(非常总和)
#正在为此词典中的年度数据创建词典层
年度数据={
“Y_-RR”:Y_-RR
}
#为此字典中的montly数据创建字典层
每月数据={
“莫乌日”
}
#为每个站点创建字典层。每个月都有每月和每年的数据
车站={
“montly_数据”:montly_数据,
“年度数据”:年度数据
}
车站数据字典[“车站数据”][车站id]=车站
注意,当循环为您初始化变量时,在
for
循环之前不需要像
i=0
这样的语句


此外,字典的
“station\u data”
层似乎是多余的,因为它是该层的唯一键,但您在所需的输出中有它,所以我将其保留在了中。

我没有测试它,因为我没有您的数据,但这应该会生成您所需的字典。唯一的变化是在顶部和底部:

站点数据字典={
“台站数据”:{}
}
对于范围内的i(len(站点数据文件)):#范围(0299)
车站数据熊猫=车站数据熊猫[i]
车站id=str(int(车站数据)[“车站id”][0]))
Y_RR=站点数据_f_pandas[“MO_RR”]。重新采样(“A”)。应用(非常总和)
#正在为此词典中的年度数据创建词典层
年度数据={
“Y_-RR”:Y_-RR
}
#为此字典中的montly数据创建字典层
每月数据={
“莫乌日”
}
#为每个站点创建字典层。每个月都有每月和每年的数据
车站={
“montly_数据”:montly_数据,
“年度数据”:年度数据
}
车站数据字典[“车站数据”][车站id]=车站
注意,当循环为您初始化变量时,在
for
循环之前不需要像
i=0
这样的语句

此外,字典的
“station\u data”
层似乎是多余的,因为它是该层的唯一键,但您在所需的输出中有它,所以我将其留在了中。

尝试下面的方法。 此外,如果您需要词典保持与添加词典相同的顺序,则必须使用OrderedDict from collections包

因此,当您打印字典或循环其数据时,您将按照在下面的代码中添加它们的相同顺序进行循环

Obs:我假设station_data_files_pandas是一个列表,而不是一个字典,这就是为什么我修改了for循环的“签名”以使用增强的for。 如果我错了,并且这个变量实际上是一个字典,并且for循环的每个整数都是这个字典的一个键,那么您也可以循环通过如下项:

对于站点数据文件中的k,v.items():
#现在k携带您以前使用的整数。
#而v则携带着台站数据
代码更正
导入集合
station\u data\u dictionary=collections.OrderedDict()
#对于范围内的i(len(站点数据文件)):#范围(0299)
#使用增强的for循环
对于站点数据文件中的站点数据熊猫:#范围(0299)
#这已经不需要了
#车站数据熊猫=车站数据熊猫[i]
#车站id=str(int(车站数据)[“车站id”][0]))
#您可以直接转换为字符串
车站id=str(int(车站数据)[“车站id”][0]))
Y_RR=站点数据_f_pandas[“MO_RR”]。重新采样(“A”)。应用(非常总和)
MO_RR=#这里有些东西
#为手动数据创建字典层