简体   繁体   English

合并和总结循环槽嵌套列表中的项目

[英]Merging and sum up items in looping trough nested lists

Need your help, to solve strugle with list of lists filtering, merging and summarizing.需要您的帮助,解决列表过滤、合并和汇总的难题。 My input params:我的输入参数:

  • Nested list structure [p0-n, p1-n, p2-n, q3, q4, q5] n - num嵌套列表结构 [p0-n, p1-n, p2-n, q3, q4, q5] n - num
  • Items using for filtering and merging (p0 and p1 and p2)用于过滤和合并的项目(p0 和 p1 和 p2)
  • Summarize (q3, q4, q5) if all three control items (p0, p1, p2) in looping sublist are the same.如果循环子列表中的三个控制项(p0,p1,p2)都相同,则总结(q3,q4,q5)。 And merge to one common nested list.并合并到一个常见的嵌套列表。

Sample list (in_list):样本列表(in_list):

    in_list = [
                  ['p0-1', 'p1-1', 'p2-1', 1, 1, 2], 
                  ['p0-1', 'p1-1', 'p2-1', 2, 1, 1], 
                  ['p0-1', 'p1-1', 'p2-1', 1, 2, 1],

                  ['p0-2', 'p1-1', 'p2-1', 1, 1, 1], 
                  ['p0-2', 'p1-2', 'p2-1', 1, 1, 1], 
                  ['p0-2', 'p1-1', 'p2-2', 1, 1, 1]
              ]

My variant (I found it here) what i've got for now:我的变体(我在这里找到了)我现在所拥有的:

    out_list = [[k, sum(q1 for p1, p2, p3, q1, q2, q3 in g)] 
                for k, g in groupby(sorted(in_list), key=itemgetter(0, 1, 2))]

My result (out_list):我的结果(out_list):

    print(out_list)

    [
        [('p0-1', 'p1-1', 'p2-1'), 4], 
        [('p0-2', 'p1-1', 'p2-1'), 1], 
        [('p0-2', 'p1-1', 'p2-2'), 1],   
        [('p0-2', 'p1-2', 'p2-1'), 1]
    ]

This comprehension almost do what I need, but summarizing only one q1 (or q2 or q3).这种理解几乎可以满足我的需要,但只总结了一个 q1(或 q2 或 q3)。 And my tries about insert q2, q3 to this comprehension was unsuccessful.我尝试将 q2、q3 插入到这种理解中是不成功的。 Is it possible to modify this comprehension to summarize q1, q2 and q3 at the same time?是否可以修改这个理解来同时总结 q1、q2 和 q3? Or maybe exist more simple way to achieve what I need?或者也许存在更简单的方法来实现我所需要的?

Desirable result list (out_list):理想的结果列表(out_list):

    [
        ['p0-1', 'p1-1', 'p2-1', 4, 4, 4], 
        ['p0-2', 'p1-1', 'p2-1', 1, 1, 1], 
        ['p0-2', 'p1-2', 'p2-1', 1, 1, 1], 
        ['p0-2', 'p1-1', 'p2-2', 1, 1, 1]
    ]

Thanks in advance and appreciate for any useful advises and help.在此先感谢并感谢您提供任何有用的建议和帮助。

Try itertools.tee :试试itertools.tee

in_list = [
    ["p0-1", "p1-1", "p2-1", 1, 1, 2],
    ["p0-1", "p1-1", "p2-1", 2, 1, 1],
    ["p0-1", "p1-1", "p2-1", 1, 2, 1],
    ["p0-2", "p1-1", "p2-1", 1, 1, 1],
    ["p0-2", "p1-2", "p2-1", 1, 1, 1],
    ["p0-2", "p1-1", "p2-2", 1, 1, 1],
]

from itertools import groupby, tee
from operator import itemgetter

out = []
for k, g in groupby(sorted(in_list), key=itemgetter(0, 1, 2)):
    grps = tee(g, 3)
    out.append([*k, *(sum(v[i] for v in g) for i, g in enumerate(grps, 3))])

print(out)

Prints:印刷:

[
    ["p0-1", "p1-1", "p2-1", 4, 4, 4],
    ["p0-2", "p1-1", "p2-1", 1, 1, 1],
    ["p0-2", "p1-1", "p2-2", 1, 1, 1],
    ["p0-2", "p1-2", "p2-1", 1, 1, 1],
]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM