Как выбрать ФИО из списка строк и изменить формат даты?
Нужно написать функцию, которая принимает список строк и возвращает список словарей в формате {"name": name, "date": date}, где:
- name - имя автора
- date - дата в формате
dd/mm/yyyy
Например: [{"name": Wilkie Collins, "date": 08/01/1824}, {"name": James Joyce, "date": 13/01/1941}...]
Список строк:
8th January 1824 - Wilkie Collins's birthday, author of Woman in White
13th January 1941 - James Joyce's birthday, author of Ulysses
14th January 1898 - Lewis Carroll's birthday, author of Alice in Wonderland
3rd January 1892 - J. R. R. Tolkien's birthday, author of The Hobbit & The Lord of the Rings
18th January 1936 - Rudyard Kipling's death, author of Jungle Book
19th January 1809 - Edgar Allan Poe's birthday, author of The Tell Tale Heart
Я начал писать код:
def dict_names():
dict_names = re.findall(r"[A-Z]+[a-z]+['s]", list_name)
return dict_names
В итоге выбирает только фамилии, а имя или инициалы не возвращает. Как это исправить? И как отдельно выбрать дату?
Ответы (2 шт):
Не могу оставлять комментарии, поэтому так: [a-zA-Z. ]+'
Потом нужно будет обрезать первый пробел и '
Дата: ^ \S+ \S+ \S+
Пробел после ^ опционален и нужен, если строчки начинаются с пробела.
Я бы для таких дат воспользовался dateutil c последующим преобразованием в нужный вам формат %d/%m/%Y, а имена - просто split по 's , если не важен "тип" даты (рождения/смерти):
from dateutil.parser import parse
result_data = []
for row in rows:
parts = row.split(" - ")
date = parse(parts[0]).date().strftime("%d/%m/%Y")
name = parts[1].split("'s")[0]
result_data.append({
'date': date,
'name': name
})
Для вашего тесткейса:
rows = [
"8th January 1824 - Wilkie Collins's birthday, author of Woman in White",
"13th January 1941 - James Joyce's birthday, author of Ulysses",
"14th January 1898 - Lewis Carroll's birthday, author of Alice in Wonderland",
"3rd January 1892 - J. R. R. Tolkien's birthday, author of The Hobbit & The Lord of the Rings",
"18th January 1936 - Rudyard Kipling's death, author of Jungle Book",
"19th January 1809 - Edgar Allan Poe's birthday, author of The Tell Tale Heart"
]
в result_data будет список словарей нужного формата:
>>>result_data
[
{'name': 'Wilkie Collins', 'date': '08/01/1824'},
{'name': 'James Joyce', 'date': '13/01/1941'},
{'name': 'Lewis Carroll', 'date': '14/01/1898'},
{'name': 'J. R. R. Tolkien', 'date': '03/01/1892'},
{'name': 'Rudyard Kipling', 'date': '18/01/1936'},
{'name': 'Edgar Allan Poe', 'date': '19/01/1809'}
]