Python - разбить строку на словарь - PullRequest
1 голос
/ 28 марта 2020

Моя ситуация следующая. У меня есть жало "список", как это

Text1
Text2: value1
Text3:
Text4:
Text5: value2
...

Теперь я хочу разделить текст в словарь с парой ключ-значение.

Я попробовал это с этим 1liner

sp = dict(s.split(':') for s in list.split('\n') if len(s) > 1 and s.count(':') > 0)

Это прекрасно работает, пока нет значений, как в Text3 и Text4.

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

{ Text2:value1,Text3:'',Text4:'',Text5:value2 }

Text1 должен быть пропущен - но Text3 & Text4 Мне нужно в словаре, также, если значение пустое.

Ответы [ 2 ]

1 голос
/ 28 марта 2020

Из-за этой проблемы, которую я обнаружил только с помощью комментариев, я мог решить проблему следующим образом

my_str = """Text1
Text2: value1
Text3:
Text4:
Text5: value2
Text6:http: // something
"""

Проблема заключалась в том, что последняя строка была разделена на 3 части из-за webadress в поле значения.

sp = dict(s.split(':') for s in my_str.split('\n') if len(s) > 1 and s.count(':') == 1)

Может быть, есть более приятный способ, но я проверил, если разделить символ ":" только 1 раз - потому что тогда я уверен, что получить пару, я могу вставить в словарь:)

1 голос
/ 28 марта 2020

для вашего случая Key:http:// xyz .com вы должны остановить split после первого матча, используя s.split(':', 1)):

my_str = """Text1
Text2: value1
Text3:
Text4:
Text5: value2
Key:http:// xyz .com 
"""

sp = dict(map(str.strip, s.split(':', 1)) for s in my_str.split('\n') if ':' in s)
print(sp)

output:

{'Text2': 'value1', 'Text3': '', 'Text4': '', 'Text5': 'value2', 'Key': 'http:// xyz .com'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...