DarkWood
@DarkWood

Сопоставление двух списков и вывод блоками на основе количества значений в одном из них?

Здравствуйте.

Думаю, что вопрос решается легче, чем я это придумал, но моя голова уже зациклилась и не находит другого выхода. Надеюсь, вы подскажете таковое.

Есть массив данных, представленных обычным текстом. В этом массиве представлены значения сразу нескольким сущностям. Сами эти сущности вынесены в отдельный список. Значения для каждой сущности идут блоками, разделенными пустой строкой. Пример ниже в коде. Количество значений на каждую сущность может различаться.

dataset_names = ["moscow", "new-york"]

text = """2008	11 186
2009	11 281
2011	11 776
2012	11 856

2011	11 776
2012	11 856"""

def chunks(l, n=2):
    """Разбивает список (l) на части размером n"""
    for i in range(0, len(l), n):
        yield l[i:i + n]

prepare_text = text.replace(' ','').replace('\n','\t').split('\t\t')

data = [list(chunks(item.split('\t'))) for item in prepare_text]


Что я делаю сейчас: удаляю пробелы (они не воспринимаются в месте назначения), разбиваю на блоки, делю блоки по парам.

А дальше, как уже написал, мозги впадают в цикл и выходят в конечном счете на одно и то же решение, которое не дает желаемого результата. Вроде не трудно сопоставить оба списка и добавить в чанки имена датасетов, но как потом вытащить оттуда данные в нужном форматировании?

В конечном счете я хочу получить примерно следующее:

moscow
value_1 = 2008
value_2 = 11186
value_1 = 2009
value_2 = 11281
etc

new-york
value_1
value_2
value_1
value_2

etc

Проще говоря, хочу вывести к каждой сущности из одного списка все соответствующие ей значения из другого, дополнительно разбивая их по парам.

Направьте, пожалуйста, в нужную сторону.
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ответы на вопрос 1
@gill-sama
import re

dataset_names = ["moscow", "new-york"]

text = """2008	11 186
2009	11 281
2011	11 776
2012	11 856
2011	11 776

2012	11 856"""



prepare_text = re.split('\t+|\n+', text)

out  = {k: [{'value_{}'.format(i+1): prepare_text[t+i] for i in range(2)} for t in range(0,len(prepare_text), 2)] for k in dataset_names}
print(out)

что то вроде такого?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы