如何将完全相同的子列表和子列表的末尾合并到一起?

2024-09-28 22:27:25 发布

您现在位置:Python中文网/ 问答频道 /正文

如何将相同的子列表组合/合并到一个子列表中,并将不相同的部分附加到列表的末尾?在

例如,这些子列表中唯一的区别因素是周数和每个子列表末尾的计数。我希望每个唯一的“UserId”、“Amount”和“Email”只有一个子列表,并将不相同的部分附加到这个子列表中。在

更复杂的是,我希望“计数”的顺序应该是在哪一周之内。例如,下面您可以看到1代表第1周,10代表第2周,14代表第4周,而没有看到第3周。如果没有值,则改为追加0。在

lst = [
        [
          ['UserID','Amount','Email','week1',1],
          ['UserID','Amount','Email','week4',14],
          ['UserID','Amount','Email','week2',10]

        ],
        [
          ['UserID2','Amount','Email','week1',99],
          ['UserID2','Amount','Email','week2',10],
          ['UserID2','Amount','Email','week4',14]
        ]
      ]

Desired_List = [
                 ['UserID','Amount','Email','week1',1,10,0,14],
                 ['UserID2','Amount','Email','week1',99,10,0,14]
               ]

这会将它们组合起来生成结果,但对于缺少的几周,它不会置0:

^{pr2}$

Tags: 列表email代表amount计数因素userid末尾
1条回答
网友
1楼 · 发布于 2024-09-28 22:27:25

你所要达到的目标可能不适合一条直线。在我的方法中,把下面列出的两个变量作为字典中的一个变量。在

现在,有了字典,创建一个周数序列。使用str.format并确定任何给定子列表int(max(seq[0][-1])[4:])的最大周数,可以很容易地完成这项工作。在

最后,使用dict.get,查找字典,对于任何缺少的键,将其默认为0

实施

def foo(seq):
    from operator import itemgetter
    # | [['UserID', 'Amount', 'Email', {'week1': 1, 'week2': 10, 'week4': 14}], .|
    # V                                                                          V
    seq_dict = (grp[0][:3] + [dict(map(itemgetter(3,4), grp))] for grp in lst)
    # 'week4' | '4' | 4
    max_weeks = int(max(seq[0][-1])[4:])
    # | ['week1', 'week2', 'week3', 'week4'] |
    # V                                      V
    week_range = range(1, max_weeks + 1)
    return [items[:-1] + [items[-1].get("week{}".format(week), 0) 
                          for week in week_range]
            for items in seq_dict]

输出

^{pr2}$

相关问题 更多 >