我正在寻找看似简单的东西,但我只能找到复杂的答案。
我正在对产生多个数据帧的函数“ BT”进行一些迭代。我想直接将“迭代”结果作为函数的输出,只是通过名称区分它们。
我希望我从1变到10,并动态标记我的输出数据帧,以便我可以知道它们对应于哪个“ i”。理想的代码如下:)
for i in range(10):
start = dt.datetime(2017-i,12,31)
'model_'%i, 'variation_'%i, 'rank_'%i, 'correl_'%i = BT(df_1, df_2)
我知道我可以用字典获得类似的结果,但是有没有一种更快的方法,接近上面的显示?
答案 0 :(得分:2)
并非完全符合您的要求,但是在这种情况下,通常会使用list
和namedtuple
:
from collections import namedtuple
MyData = namedtuple("MyData", ["model", "variation", "rank", "correl"])
data = []
for i in range(10):
start = dt.datetime(2017-i,12,31)
data.append(MyData(*BT(df_1, df_2)))
# e.g. access to single df
data[1].variation
一种替代方法是生成单独的项目列表(这将改变您以后访问它们的方式):
data = []
for i in range(10):
start = dt.datetime(2017-i,12,31)
data.append(BT(df_1, df_2))
model, variation, rank, correl = zip(*data)
# e.g. access to single df
variation[1]
由于我不知道BT函数的功能,所以代码中可能存在错误,但是我希望这个答案仍然有用。
答案 1 :(得分:0)
您可以执行以下操作:
myList = []
for i in range(10):
start = dt.datetime(2017-i,12,31)
myList.append(("model_{0},model_{0},variation_{0},rank_{0},correl_{0}".format(i), BT(df_1, df_2))
答案 2 :(得分:0)
您还可以使用嵌套字典:
data = {}
keys = ('model', 'variation', 'rank', 'correl')
for i in range(10):
start = dt.datetime(2017-i,12,31)
data[i] = dict(zip(keys, BT(df_1, df_2)))
然后访问第一个结果data[0]
。