Как разделить строку на подстроки?

У меня есть вот такая СТРОКА:

{'4000000000111':'Бумага А4', '4000000002111':'OIL GEL PEN (Sigma)', '4000000003111':'Календарь для кармана'}

Мне нужно ее изменить до следующего вида:

4000000000111 Бумага А4
4000000002111 OIL GEL PEN (Sigma)
4000000003111 Календарь для кармана

Я написала вот такой код:

k="{'4000000000111':'Бумага А4', '4000000002111':'OIL GEL PEN (Sigma)', 
'4000000003111':'Календарь для кармана'}"
l = []

for i in k:
   l.append(i)#здесь я разделяла это на отдельные элементы'{', "'", '4', '0', '0', '0'...
 
l1 = []
for j in l:
   if j in "'{},":
      del j
   else:
      l1.append(j)#здесь удаляла ненужное и добавляла в список['4', '0', '0', '0', '0',

new = ''.join(l1)
#здесь получила вот такое 4000000000111:Бумага А4
m = []
v = new.split()
for h in v:
   m.append(h.replace(':', ' '))
print(*m)#здесь заменяла : на пробел

Я получила вот такое:

4000000000111 Бумага А4 4000000002111 OIL GEL PEN (Sigma) 4000000003111 Календарь для кармана

Я пробовала писать в конце print(*m, sep ='\n'), но я не получала желаемого результата

Как разбить эту строчку на подстроки?


Ответы (2 шт):

Автор решения: Sergey K.

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

import json
data_str = "{'4000000000111':'Бумага А4', '4000000002111':'OIL GEL PEN (Sigma)', '4000000003111':'Календарь для кармана'}".replace("'", '"')
# здесь пришлось заменить с помощью метода replace одинарные кавычки на двойные, потому что так требует формат JSON'а

data = json.loads(data_str) # так мы парсим строку, в итоге получаем dict.

for k in data: # в цикле перебираются ключи из dict'а
    print(k, data[k]) # выводим пары ключ и значение
→ Ссылка
Автор решения: SergFSM

ваша строка это по сути уже готовый словарь, извлечь его из строки можно функцией eval таким образом:

k="{'4000000000111':'Бумага А4', '4000000002111':'OIL GEL PEN (Sigma)', '4000000003111':'Календарь для кармана'}"

for key,v in eval(k).items():
    print(key, v)
'''
4000000000111 Бумага А4
4000000002111 OIL GEL PEN (Sigma)
4000000003111 Календарь для кармана

но есть мнение, что использование eval не вполне безопасно (имеется в виду вычисление строк полученных из ненадежных источников). Для безопасного вычисления строк из ненадежных источников есть такой способ:

from ast import literal_eval

for key,v in literal_eval(k).items():
    print(key, v)
'''
4000000000111 Бумага А4
4000000002111 OIL GEL PEN (Sigma)
4000000003111 Календарь для кармана
→ Ссылка