Как добавить ключ - значение в словарь Python при этом в значении должно быть первое слово существующего значения
Задачка такая, есть список со словарями например:
users = [{"last_name": "Holy", "full_name": "Jack Holy",},{"last_name": "Adams","full_name": "Mike Adams",}]
Нужно создать в словаре новый ключ first_name со значением имени (то есть взять первое значение Mike или Jack из ключа full_name и добавить к новому ключу first_name). Не могу понять как брать именно первое значение из ключа full_name и добавить в новый ключ first_name?
Попытка решения:
def restore_names(users: list) -> None:
for new_dict in users:
if 'first_name' not in new_dict:
new_dict['first_name'] = new_dict.get('full_name')
Ответы (2 шт):
Автор решения: n1tr0xs
→ Ссылка
Если вам нужно изменить данный список словарей:
def f(users):
for user in users:
full_name = user['full_name']
first_name = full_name.split()[0]
user['first_name'] = first_name
f(users)
print(users)
Если вам нужно не менять, а создать новый:
def f(users):
new_users = []
for user in users:
full_name = user['full_name']
first_name = full_name.split()[0]
last_name = user['last_name']
new_user = {
'first_name': first_name,
'last_name': last_name,
'full_name': full_name,
}
new_users.append(new_user)
return new_users
new_users = f(users)
print(new_users)
Сокращенная версия первого кода:
def f(users):
for user in users:
user['first_name'] = user['full_name'].split()[0]
Второго кода:
def f(users):
return [{'first_name': user['full_name'].split()[0],
'last_name': user['last_name'],
'full_name': user['full_name']} for user in users]
Автор решения: Namerek
→ Ссылка
Докину вариант
from pprint import pp
import re
users = [
{"last_name": "Holy", "full_name": "Jack Holy"},
{"last_name": "Adams", "full_name": "Mike Adams"}
]
for user in users:
user.update(
re.search(r'^(?P<first_name>\w+)?', user.get('full_name', '')).groupdict()
)
pp(users)
[{'last_name': 'Holy', 'full_name': 'Jack Holy', 'first_name': 'Jack'},
{'last_name': 'Adams', 'full_name': 'Mike Adams', 'first_name': 'Mike'}]
Если немного развить тему, то может получиться следующее:
from pprint import pp
import re
users = [{"full_name": "Jack Holy"}, {"full_name": "Mike"}]
for user in users:
user.update(
re.search(
r'^(?P<first_name>\w+)?\s*(?P<last_name>\w+)?$',
user.get('full_name', '')
).groupdict()
)
pp(
users
)
[{'full_name': 'Jack Holy', 'first_name': 'Jack', 'last_name': 'Holy'},
{'full_name': 'Mike', 'first_name': 'Mike', 'last_name': None}]