-1

我在列表中附加两个值,即 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)],以此类推...],这样一个页面的所有边界框坐标都将在一个子列表中以执行某些逻辑。这个怎么做?

4

3 回答 3

0

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

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))]]
于 2020-07-13T14:52:45.593 回答
0

我已对此进行了编辑以符合您的要求:

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)
于 2020-07-13T13:20:25.127 回答
0

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

水库,最后 = [[ ]],无

对于 A 中的 x,y:

if last is None or abs(last - x) == 0:

    res[-1].append((x, y) )

else:

    res.append([x])

last = x
于 2020-07-13T14:46:23.590 回答