Разделить список на подсписки на основе первого значения в первом элементе - PullRequest
0 голосов
/ 13 июля 2020

Я добавляю два значения в список, например A = [(1, (2, 3, 4, 5)), (1, (20, 33, 41, 15)), (2, (12, 5) , 34, 10)) и так далее ...], где 1-е значение - это номер страницы, а следующие четыре значения - координаты ограничивающего прямоугольника на этой конкретной странице. Теперь мне нужно разбить список на подсписки, используя первое значение (номер страницы) в элементе (1, 2 в данном примере). Результат должен выглядеть так [[(1, (2, 3, 4, 5)), (1, (20, 33, 41, 15))], [2, (12, 5, 34, 10)], и так далее ...], чтобы все координаты ограничивающего прямоугольника страницы находились в подсписке для выполнения определенной логики. Как это сделать?

Ответы [ 3 ]

0 голосов
/ 13 июля 2020

В for l oop Я проверяю номер предыдущей и текущей страницы, если разница равна нулю, добавляя их в одни и те же подсписки. Код выглядит следующим образом:

res, last = [[]], None

для x, y в A:

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

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

else:

    res.append([x])

last = x
0 голосов
/ 13 июля 2020

Может быть, проще использовать словарь, чтобы сгруппировать подсписки и отформатировать их позже.

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))]]
0 голосов
/ 13 июля 2020

Я отредактировал это, чтобы соответствовать вашим требованиям:

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)
...