Сопоставление двух списков и вывод блоками на основе количества значений в одном из них? Здравствуйте. Думаю, что вопрос решается легче, чем я это придумал, но моя голова уже зациклилась и не находит другого выхода. Надеюсь, вы подскажете таковое. Есть массив данных, представленных обычным текстом. В этом массиве представлены значения сразу нескольким сущностям. Сами эти сущности вынесены в отдельный список. Значения для каждой сущности идут блоками, разделенными пустой строкой. Пример ниже в коде. Количество значений на каждую сущность может различаться.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 Проще говоря, хочу вывести к каждой сущности из одного списка все соответствующие ей значения из другого, дополнительно разбивая их по парам. Направьте, пожалуйста, в нужную сторону.
Вы можете использовать цикл for для сопоставления значений из списка dataset_names с данными из списка data и вывода их в нужном формате. Ниже приведен пример кода:
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(' ', '').split('\n\n') data = [list(chunks(item.split('\n'))) for item in prepare_text] for i in range(len(dataset_names)): print(dataset_names[i]) for item in data[i]: for values in item: value_1, value_2 = values.split() print(f"value_1 = {value_1}") print(f"value_2 = {value_2}")
Этот код будет выводить значения из списка data в формате, который вы указали, с указанием соответствующей сущности из списка dataset_names.
Вы можете использовать цикл for для сопоставления значений из списка dataset_names с данными из списка data и вывода их в нужном формате. Ниже приведен пример кода:
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(' ', '').split('\n\n')
data = [list(chunks(item.split('\n'))) for item in prepare_text]
for i in range(len(dataset_names)):
print(dataset_names[i])
for item in data[i]:
for values in item:
value_1, value_2 = values.split()
print(f"value_1 = {value_1}")
print(f"value_2 = {value_2}")
Этот код будет выводить значения из списка data в формате, который вы указали, с указанием соответствующей сущности из списка dataset_names.