Соединить значения словарей
Есть список словарей:
[{'name': 'Jules Verne', 'date': '24/03/1905'}
{'name': 'Jules Verne', 'date': '8/02/1828'}
{'name': 'Leo Tolstoy', 'date': '20/11/1910'}
{'name': 'Leo Tolstoy', 'date': '9/09/1828'}
{'name': 'Lewis Carroll', 'date': '14/01/1898'}
{'name': 'Lewis Carroll', 'date': '27/01/1832'}
{'name': 'Mark Twain', 'date': '30/11/1835'}]
Необходимо на выходе получить список словарей, где повторяющиеся имена соединятся, а их значения будут под другими ключами, например:
[{'name': 'Jules Verne', 'birth_date': '8/02/1828', 'death_date': '24/03/1905'}, ...]
Это должна быть функция. И без использования сложных инструментов.
Ответы (2 шт):
Автор решения: Danis
→ Ссылка
def f(lst):
res = [{"name": lst[0]["name"], "date": []}]
lst.sort(key = lambda x: int(x["date"][-4:])
for dict_ in lst:
for i in range(len(res)):
if res[i]["name"] == dict_["name"]:
res[i]["date"].append(dict_["date"])
break
else:
res.append({"name": dict_["name"], "date": [dict_["date"]]})
lst = []
for dict_ in res:
lst.append({})
lst[-1]["name"] = dict_["name"]
lst[-1]["birth_date"] = dict_["date"][0]
if len(dict_["date"]) > 1:
lst[-1]["deat_date"] = dict_["date"][1]
return lst
Автор решения: user363756
→ Ссылка
В Python3.9 добавили операцию объединения словарей
dict1 |= dict2