разбить строку и составить пару ключ-значение - PullRequest
0 голосов
/ 27 мая 2018

У меня есть следующая строка в Python:

Date: 07/14/1995 Time: 11:31:50 Subject text: Something-cool

Я хочу подготовить dict() из него с помощью следующих key: [value]

{"Date":["07/13/1995"], "Time": ["11:31:50"], "Subject text":["Something-cool"]}

Если я разделю строку с: Я получаю следующее.Как я могу получить вышеуказанный желаемый результат?

>>> text.split(": ")
['Date', '07/14/1995 Time', '11:31:50 Subject text', 'Something-cool']

1 Ответ

0 голосов
/ 27 мая 2018

Давайте использовать re.findall здесь:

>>> import re
>>> dict(re.findall(r'(?=\S|^)(.+?): (\S+)', text))
{'Date': '07/14/1995', 'Subject text': 'Something-cool', 'Time': '11:31:50'}

Или, если вы настаиваете на формате,

>>> {k : [v] for k, v in re.findall(r'(?=\S|^)(.+?): (\S+)', text)}
{
   'Date'        : ['07/14/1995'],
   'Subject text': ['Something-cool'],
   'Time'        : ['11:31:50']
}

Подробности

(?=   # lookahead 
\S    # anything that isn't a space
|     # OR
^     # start of line
) 
(.+?) # 1st capture group - 1 or more characters, until...
:     # ...a colon
\s    # space
(\S+) # 2nd capture group - one or more characters that are not wsp 

Семантически, это регулярное выражение означает «получить мне все пары элементов, которые следуют этому конкретному шаблону чего-то, за которым следуют двоеточие и пробел и куча символов, которые не являются пробелами».Предварительный просмотр в начале таков, что группы не захватываются с пробелом в начале (и lookbehinds поддерживают только утверждения фиксированной ширины, поэтому).

Примечание: Это не удастся, если ваши значения имеют пробелы вих.


Если вы делаете это для нескольких строк в текстовом файле, давайте построим это регулярное выражение и используем defaultdict:

from collections import defaultdict
d = defaultdict(list)

with open(file) as f:
    for text in file:
        for k, v in re.findall(r'(?=\S|^)(.+?): (\S+)', text.rstrip()):
            d[k].append(v)

Thisдобавит одно или несколько значений в ваш словарь для данного ключа.

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