Python:根据值/条件创建子列表

标签 python python-3.x list

作为线性程序的结果,我从字典中得到一个嵌套列表,如下所示:

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/

相关文章:

python - 在ImageDraw python中绘制圆角线

python - 获取跨列的值计数-Pandas DataFrame

python - Gurobipy 优化 : Constraint to make variable value to be greater than 100 OR equal to 0

python - 如何在 Mac OS X 中不打开任何终端窗口的情况下运行 Python 3 tkinter 应用程序?

python - 如何在作为字典值的列表中添加元素,并且这些元素不会作为该字典的另一个键重复?

Python-从长度不等的列表列表中获取所有唯一组合并进行替换

当键出现多次时要字典的Python列表列表

python - 为每个收件人发送一封邮件

python - 如何使用 Pandas 中多列的条件从数据框中选择行?

python - 在Python中解析没有 'root'节点的XML文件