Python как добавлять значения в словарь, без удаления предыдущего значения?
Мой код берет данные из БД, разделяет по марки и модели, и после для каждой модели подбирает свою марку. Но проблема в том, что последующее значение, удаляет предыдущее, как сохранить их все?
Вот БД
| car | model |
|---|---|
| Hava | mx1 |
| Haval | xx100 |
| BMW | X5 |
| BMW | X6 |
| BMW | X3 |
| Mersedes | Q2 |
| Mersedes | Q1 |
| Mersedes | M3 |
| Mersedes | MM14 |
| Mersedes | hh1 |
| Lada | Kalina |
| Lada | Kalina |
| Audi | a8 |
| Cherry | GS21 |
| Mersedes | hh1 |
| Mersedes | Sclass |
class db_info:
def take_info_from_db(self=None):
key_colum =[]
car_dicts ={}
models = []
for first_col in cursor.fetchall():
key_colum.append(first_col[0])
key_colum.append(first_col[1])
if key_colum[1] not in car_dicts:
car_dicts[str(key_colum[0])] = key_colum[1]
key_colum.pop(0)
key_colum.pop(0)
car_dicts={key:[value] for key, value in car_dicts.items()}
print(car_dicts)
db = db_info
print(db.take_info_from_db())
И на выход получаю это. Все бы хорошо, но в словарь сохраняется только последняя модель для определенной марки. Как исправить?
{'Haval': ['xx100'], 'BMW': ['X3'], 'Mersedes': ['Sclass'], 'Lada': ['Kalina'], 'Audi': ['a8'], 'Cherry': ['GS21']}
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Я бы так заполнял словарь:
car_by_models = dict()
for car, model in cursor.fetchall():
if car not in car_by_models:
car_by_models[car] = []
car_by_models[car].append(model)
print(car_by_models)
Вариант без распаковки полей в цикле:
for row in cursor.fetchall():
car = row[0]
model = row[1]
if car not in car_by_models:
car_by_models[car] = []
car_by_models[car].append(model)
print(car_by_models)
Если использовать defaultdict, то можно без проверок:
from collections import defaultdict
...
car_by_models = defaultdict(list)
for car, model in cursor.fetchall():
car_by_models[car].append(model)
print(car_by_models)