作为线性程序的结果,我从一个像这样的字典中得到了一个嵌套列表:
lst = [['a0', 1, 'x_01', 'p_01', 39],
['a0', 1, 'x_01', 'p_02', 19],
['a0', 1, 'x_02', 'p_01', 10],
['a0', 1, 'x_02', 'p_02', 5],
['a1', 1, 'x_01', 'y_01', 'p_01', 5],
['a1', 1, 'x_01', 'y_01', 'p_02', 5],
['a1', 1, 'x_02', 'y_01', 'p_02', 5],
['a1', 1, 'x_02', 'y_01', 'p_02', 5]]
任何一种'a'表示变量都是针对一组范围(例如1,'x_01','p_01'-等等)求解的,其值由列表的最后一个元素表示。
现在的任务是创建仅包含相同变量列表的子列表。 (在下一步中,它们将被传递到pd.df) 列表列表可能看起来像这样或类似的内容:
new_lst = [[['a0', 1, 'x_01', 'p_01', 39],
['a0', 1, 'x_01', 'p_02', 19],
['a0', 1, 'x_02', 'p_01', 10],
['a0', 1, 'x_02', 'p_02', 5]],
[['a1', 1, 'x_01', 'y_01', 'p_01', 5],
['a1', 1, 'x_01', 'y_01', 'p_02', 5],
['a1', 1, 'x_02', 'y_01', 'p_02', 5],
['a1', 1, 'x_02', 'y_01', 'p_02', 5]]]
到目前为止,我尝试过的是:
st0 = list(set([x[0] for x in lst]))
获取所有唯一变量。
这,但是显然不能完成任务:
n = [x for x in lst for i in st0 if x[0]==i]
我在这里尝试的基于以下内容:
n1 = [x for x in lst if x[0]==st0[0]]
n2 = [x for x in lst if x[0]==st0[1]]
ii = [n1,n2]
基于模型大小,我有10、20个或更多个不同维度的不同变量。此外,模型需要运行几次以测试不同的参数。
可以进行硬编码,但不是必需的。如果有人有个好主意,请随时帮助我。
答案 0 :(得分:3)
使用itertools.groupby
:
from itertools import groupby
lst = [['a0', 1, 'x_01', 'p_01', 39],
['a0', 1, 'x_01', 'p_02', 19],
['a0', 1, 'x_02', 'p_01', 10],
['a0', 1, 'x_02', 'p_02', 5],
['a1', 1, 'x_01', 'y_01', 'p_01', 5],
['a1', 1, 'x_01', 'y_01', 'p_02', 5],
['a1', 1, 'x_02', 'y_01', 'p_02', 5],
['a1', 1, 'x_02', 'y_01', 'p_02', 5]]
new_lst = []
s_lst = sorted(lst, key=lambda x: x[0])
for k, v in groupby(s_lst, key=lambda x: x[0]):
new_lst.append(list(v))
print(new_lst)
输出:
[[['a0', 1, 'x_01', 'p_01', 39],
['a0', 1, 'x_01', 'p_02', 19],
['a0', 1, 'x_02', 'p_01', 10],
['a0', 1, 'x_02', 'p_02', 5]],
[['a1', 1, 'x_01', 'y_01', 'p_01', 5],
['a1', 1, 'x_01', 'y_01', 'p_02', 5],
['a1', 1, 'x_02', 'y_01', 'p_02', 5],
['a1', 1, 'x_02', 'y_01', 'p_02', 5]]]