具有动态命名输出的Python循环

时间:2018-07-12 13:11:34

标签: python python-3.x

我正在寻找看似简单的东西,但我只能找到复杂的答案。

我正在对产生多个数据帧的函数“ 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)

我知道我可以用字典获得类似的结果,但是有没有一种更快的方法,接近上面的显示?

3 个答案:

答案 0 :(得分:2)

并非完全符合您的要求,但是在这种情况下,通常会使用listnamedtuple

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]