Как добавить элемент в значение словаря Python?
У меня есть словарь например
d = {'Машина': 'car', 'Мячик': 'ball'}
и я хочу добавить в ключ "Машина" еще одно значение через генератор словарей, чтоб получилось:
'Машина': 'car', 'machine'
Ответы (4 шт):
- Структура словаря: {ключ: значение}
- Ключ в словаре всегда д/б уникален.
- Если будет добавляться повторяющийся ключ, то старый затерется.
- В значение можете что-угодно кинуть:
dict_temp = {}
dict2_temp = {1: 123, 2: '321'}
dict_temp['key_1'] = 'значение 1'
dict_temp['key_2'] = ['значение 1', 'значение 2']
dict_temp['key_3'] = (['значение 1', 'значение 2'], dict2_temp)
dict_temp['key_4'] = [key_data for key_data in dict2_temp.keys()]
Теперь посмотрим что насобирали через:
for key, val in dict_temp.items():
print( key, ':', val)
Выведет:
key_1 : значение 1
key_2 : ['значение 1', 'значение 2']
key_3 : (['значение 1', 'значение 2'], {1: 123, 2: '321'})
key_4 : [1, 2]
Всё довольно просто. Тебе нужно вместо одного значения по ключу хранить список. В этом случае есть две ситуации. Когда мы должны только создать этот список и, когда можем уже добавить в него значение.
Выглядит это следующим образом:
if dict.get(key, False) is False: # если в словаре нет такого ключа
dict[key] = [value] # добавляем его и помещает туда список с одним значением
else: # если такой ключ уже есть
dict[key].uppend(value) # добавляем значение в конец списка
.get - метод словаря, который возвращает значение по ключу, а если его нет, то False (по умолчанию None и это можно даже не указывать, здесь привёл просто для наглядности).
Эту конструкцию можно поместить в цикл, где как раз будут перебираться все значения.
Выше чел написал:
if dict.get(key, False) is False: # если в словаре нет такого ключа
dict[key] = [value] # добавляем его и помещает туда список с одним значением
else: # если такой ключ уже есть
dict[key].uppend(value) # добавляем значение в конец списка
Я проверил, работает код, если внести некоторые правки. Зарегистрировался специально, чтобы об этом написать, но репутации не хватает для того, чтобы прокомментировать его ответ, поэтому пишу свой ответ.
Во-первых, key и value должны быть строками, то есть, в кавычках. Во-вторых, команда, добавляющая элемент в список, append, а не uppend.
dict = {}
if dict.get('key', False) is False:
dict['key'] = ['value']
else:
dict['key'].append('value')
print(dict) # {'key': ['value']}
if dict.get('key', False) is False:
dict['key'] = ['value']
else:
dict['key'].append('value2')
print(dict) # {'key': ['value', 'value2']}
Но можно элегантнее проверять наличие ключа в словаре, поэтому я бы предложил такой вариант:
dict = {}
if 'key' not in dict: # если в словаре нет такого ключа
dict['key'] = ['value'] # добавляем его и помещает туда список с одним значением
else: # если такой ключ уже есть
dict['key'].append('value') # добавляем значение в конец списка
print(dict) # {'key': ['value']}
if 'key' not in dict: # если в словаре нет такого ключа
dict['key'] = ['value'] # добавляем его и помещает туда список с одним значением
else: # если такой ключ уже есть
dict['key'].append('value2') # добавляем значение в конец списка
print(dict) # {'key': ['value', 'value2']}
Павел, переменная dict зарезервирована переменная в питоне и лучше не использовать такие имена, а заменить ее на my_dict или подобное.
Также выложу цикл который у меня получился на базе показанного кода, может кому то пригодится. Цикл делает из списка строк словарь, потом проверяет если такой ключ, если ДА, то просто добавляет к уже существующему значение, новое значение, если нет создает новую пару ключ : значение.
inp = ['+71234567890 Сергей', '+71234567810 Сергей', '+51234567890 Михаил', '+72134567890 Николай']
my_dict = {}
for i in inp:
value, key = i.split()
print(f'k={key} и v={value} {type(key), type(value)}')
##if dict.get(key, False) is False:
if key not in my_dict:
my_dict[key] = [value]
else:
my_dict[key].append(value)
print(my_dict)
Всем удачи в программировании.