Я написал решение, которое может быть расширено и для других примеров.Я создал более сложный пример
Обратите внимание: у нас есть другой набор, разделенный ;
.Если я смог продемонстрировать это для этого примера, он должен работать и для других
Важно отметить, что это будет работать, только если последние 2 символа в text
равны "\n"
.Если "\n"
отсутствует в последних двух символах, удалите строку list1.remove("")
text="key3=value3;key4=value4\nkey1=value1;key2=value2\nkeyA=valueA\nkeyB=valueB\n"
Сначала я делю на \n
, это будет означать, что будет присутствовать ""
в списке, поскольку последние 2 символа text
- это "\ n"
list1 = text.split("\n")
list1.remove("")
Теперь я создаю два списка, один для добавления строки, разделенной ";"
, и другой для добавления строки НЕ разделеннойпо ";"
list2 = [] #Stuff seperated by ;
list3 = [] #Stuff not seperated by ;
for items in list1:
if ';' in items:
list2.append(items)
else:
list3.append(items)
Я создал пустой словарь, который в конечном итоге будет иметь то, что вы хотите:
result_dict = {} #To store all key, value pairs
list2
теперь имеет ['key3=value3;key4=value4', 'key1=value1;key2=value2']
#First storing key, value pairs seperated by ";"
for i in range(0, len(list2)):
a = list2[i].split(";")
result_dict[i] = dict(s.split('=') for s in a)
list3
имеет ['keyA=valueA', 'keyB=valueB']
#Now storing key, value pairs not seperated by ";"
nosemicolon_dict = dict(s.split('=') for s in list3)
for key, value in nosemicolon_dict.items():
for j in range(0, len(nosemicolon_dict)):
result_dict[j + i + 1] = {key:value}
ДЛЯ ВАШЕГО ПРИМЕРА: Запустите тот же код, приведенный выше, замените text
на ваш пример, также убедитесь, что "\n"
последние два символа втвой пример или нет.Если у вас нет "\n"
в конце строки, удалите list1.remove("")
ЭТА ЛИНИЯ
print(result_dict)
дал мне:
{0: {'key1': 'value1', 'key2': 'value2'}, 1: {'keyA': 'valueA'}}