作为线性程序的结果,我从字典中得到一个嵌套列表,如下所示:
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”等)求解的变量,其值由列表的最后一个元素表示。
现在的任务是创建仅包含相同变量列表的子列表。 (在下一步中,它们将被传递到 pdf.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 个或更多个不同维度的不同变量。此外,模型需要运行多次来测试不同的参数。
硬编码是可能的,但不是必需的。如果有人有好主意,请随时帮助我。
最佳答案
使用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]]]
关于Python:根据值/条件创建子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54725158/