【问题标题】:Split the list into sub-lists based on first value in first item根据第一项中的第一个值将列表拆分为子列表
【发布时间】:2020-11-02 16:28:37
【问题描述】:

我在列表中附加两个值,即 A = [(1, (2, 3, 4, 5)), (1, (20, 33, 41, 15)), (2, (12, 5 , 34, 10)) 等等...],其中第一个值是页码,接下来的四个值是该特定页面中的边界框坐标。现在我必须使用项目中的第一个值(页码)将列表拆分为子列表(给定示例中的 1、2)。结果应类似于 [[(1, (2, 3, 4, 5)), (1, (20, 33, 41, 15))], [2, (12, 5, 34, 10)],以此类推...],这样一个页面的所有边界框坐标都将在一个子列表中以执行某些逻辑。如何做到这一点?

【问题讨论】:

  • 请提供适当的示例测试用例,以及您的预期输出。

标签: python list list-comparison


【解决方案1】:

也许更容易使用字典对子列表进行分组并稍后对其进行格式化。

A = [(1, (2, 3, 4, 5)), (1, (20, 33, 41, 15)), (2, (12, 5, 34, 10))]

memo = {}
for (page, bbox) in A:
    if page not in memo:
        memo[page] = [bbox]
    else:
        memo[page].append(bbox)

# memo => {1: [(2, 3, 4, 5), (20, 33, 41, 15)], 2: [(12, 5, 34, 10)]}


result = []
for page, bbox_list in memo.items():
    page_list = []
    for bbox in bbox_list:
        page_list.append((page, bbox))
    result.append(page_list)

# result => [[(1, (2, 3, 4, 5)), (1, (20, 33, 41, 15))], [(2, (12, 5, 34, 10))]]

【讨论】:

    【解决方案2】:

    在 for 循环中,我正在检查上一页和当前页码,如果差异为零,则将它们附加到相同的子列表中。代码如下:

    res, last = [[ ]], 无

    对于 A 中的 x、y:

    if last is None or abs(last - x) == 0:
    
        res[-1].append((x, y) )
    
    else:
    
        res.append([x])
    
    last = x
    

    【讨论】:

      【解决方案3】:

      我已根据您的要求对其进行了编辑:

      A = [(1, (2, 3, 4, 5)), (1, (20, 33, 41, 15)), (2, (12, 5, 34, 10))]
      final = []
      final_dict = {}
      for (key, value) in A:
          if key not in final_dict:
              final_dict[key] = [(key,value)]
          else:
              final_dict[key].append((key,value))
      #print(final_dict)
      
      for key,value in final_dict.items():
          final.append(value)
      
      #print(final)
      

      【讨论】:

      • 您好,谢谢您的回答。上面的代码为列表中的每个项目提供了一个子列表,但我希望第一页中的所有坐标(有 1 个)进入子列表。万一混淆,我更新了我的问题。请检查。
      猜你喜欢
      • 1970-01-01
      • 2015-05-13
      • 2020-08-21
      • 1970-01-01
      • 2023-04-06
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 2014-07-09
      相关资源
      最近更新 更多