Как с 2 списков строк сделать словарь?
Мне нужно с 2 списков сделать 1 словарь с 2х функций я получил по списку строк:
Первый:
['J. D. Salinger', 'J. R. R. Tolkien', 'T. S. Eliot', 'Wilkie Collins', 'James Joyce', 'Lewis Carroll', 'Rudyard Kipling', 'Edgar Allan Poe', 'George Orwell', 'Lewis Carroll']
Второй:
['1st January 1919', '3rd January 1892', '4th January 1965', '8th January 1824', '13th January 1941', '14th January 1898']
Из них мне нужно сделать словарь, вот в таком формате: [{"name": "J. D. Salinger", "date": "01/01/1919"}]
Я попытался написать следующее:
def dict_names_data():
dict_names_data = []
key1 = "name"
value1 = dict_names()
key2 = "date"
value1 = dict_data()
for element in dict_names():
dict_names_data.append({
key1: value1,
key2: value2
})
return dict_names_data
но выбило ошибку. Как правильно создать словарь? и как исправить формат даты без вызова доп. библиотек?
Ответы (2 шт):
А так устроит?
names = ['J. D. Salinger', 'J. R. R. Tolkien', 'T. S. Eliot', 'Wilkie Collins', 'James Joyce', 'Lewis Carroll', 'Rudyard Kipling', 'Edgar Allan Poe', 'George Orwell', 'Lewis Carroll']
dates = ['1st January 1919', '3rd January 1892', '4th January 1965', '8th January 1824', '13th January 1941', '14th January 1898']
def date2date(text):
parts = text.split()
months = {
'January': 1,
}
res = f'{int(parts[0][:-2]):02d}/{months[parts[1]]:02d}/{int(parts[2][-2:]):02d}'
return res
# сам код
dictionary = [{'name': obj[0], 'date': date2date(obj[1])} for obj in zip(names, dates)]
print(dictionary)
функцию date2date я в лоб написал, но наверное есть что-то в библиотеке datetime, просто я не знаю
In [28]: import re
In [29]: import datetime
In [30]: pattern = re.compile(r"(\d+)([a-z]{2})")
In [31]: date_format = "%d %B %Y"
In [32]: results = []
In [33]: for name, date in zip(names, dates):
...: date = pattern.sub(r"\1", date)
...: date = datetime.datetime.strptime(date, date_format)
...: date = date.strftime("%d/%m/%Y")
...: results.append({"name": name, "date": date})
...:
In [34]: results
Out[34]:
[{'name': 'J. D. Salinger', 'date': '01/01/1919'},
{'name': 'J. R. R. Tolkien', 'date': '03/01/1892'},
{'name': 'T. S. Eliot', 'date': '04/01/1965'},
{'name': 'Wilkie Collins', 'date': '08/01/1824'},
{'name': 'James Joyce', 'date': '13/01/1941'},
{'name': 'Lewis Carroll', 'date': '14/01/1898'}]