Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Python для новичков
  • » Добавление в словарь. Как автоматически менять названия ключей при добавлении в словарь, если данные ключи уже существуют? [RSS Feed]

#1 Март 2, 2021 19:36:57

Nagibajupython69
Зарегистрирован: 2021-03-02
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Добавление в словарь. Как автоматически менять названия ключей при добавлении в словарь, если данные ключи уже существуют?

Создала пустой словарь в который добавляю ключ-значения из цикла for, необходимо сохранить все из цикла.
Подскажите пожалуйста, может поставить условие на существование ключа в словаре и придумать автоматическое генерирование названия нового ключа, если ключ уже существует в словаре.

Например у меня подается на входе:
'name': ‘NSU’
'Location': ‘Novosibirsk’
'name': ‘Alexander Ivanov’
'Aim': ‘Student’
'name': ‘MMF’

Хочу на выходе получить словарь:
{'name': ‘NSU’,'Location': ‘Novosibirsk’, ‘name_1’: ‘Alexander Ivanov’, ‘Aim’: ‘Student’, ‘name_2’: ‘MMF’}

У меня на входе список элементы которого словари. Я каждый элемент списка (словарь с вложенными словарями) преобразую как раз до простого словаря (нахожу конечные ключ-значения с помощью рекурсии), в процессе раскрытия словарей у меня и появляются одинаковые ключи. На выходе хотела бы получить список состоящий из простых словарей с сохраненнием всех ключей и преобразовать список словарей до DF. Проблема словаря - в том,что если у меня 3 раза например появляется ключ name - сохраняется лишь последнее значение, но я бы хотела получить три разные ключа.

Вот мой код, который преобразует вложенный словарь до простого, но не учитывает трансформацию ключа, если данный ключ уже есть:

def dict_traversal(d, a=defaultdict(list)):
“”“
dict_traversal is recurse method over nested dictionaries and return key-value as a dictionary
:param d: nested dictionary
:param a: new dictionary for saving the results
:return: dictionary without attachments
”“”
for key, value in d.items():
if isinstance(value, dict):
dict_traversal(value)
elif isinstance(value, list):
for el in value:
if isinstance(el,dict):
dict_traversal(el)
else:
if key not in ('url', ‘type’,'done','totalSize'):
a.append(value)
return a.copy()

Буду очень благодарна любой помощи)

Офлайн

#2 Март 2, 2021 20:03:51

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Добавление в словарь. Как автоматически менять названия ключей при добавлении в словарь, если данные ключи уже существуют?

Nagibajupython69
автоматическое генерирование названия нового ключа, если ключ уже существует в словаре.
конечно. в словаре не может быть одинаковых ключей.
 number = 1
dct = {}
val = 'test'
for key in ('name', 'name', 'Aim', 'name'):
    if key in dct:
        key = f'{key}_{number}'
        number += 1
    dct.setdefault(key, val)
print(dct)

Офлайн

#3 Март 2, 2021 21:56:08

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1359
Репутация: +  119  -
Профиль   Отправить e-mail  

Добавление в словарь. Как автоматически менять названия ключей при добавлении в словарь, если данные ключи уже существуют?

Nagibajupython69
Хочу на выходе получить словарь:
{'name': ‘NSU’,'Location': ‘Novosibirsk’, ‘name_1’: ‘Alexander Ivanov’, ‘Aim’: ‘Student’, ‘name_2’: ‘MMF’}
я бы задумался,на сколько удобна такая структура данных,на сколько удобно ей будет пользоваться при больших объемах.А так это похоже на выборку из таблиц базы данных,которую надо отправить куда-то одним запросом.ТОгда ключем я бы использовал название таблицы,а значением словарь из названия столбцов и их значения.К примеру
 d= {
	'table_name_1':
		{
			'name': 'NSU',
			'Location': 'Novosibirsk'
		},
	'table_name_2':
		{
			'name': 'Alexandr Ivanov',
			'Aim': 'Student',
		},
	'table_name_3':
		{
			'name': "MMF"
		}
}
for i in d.keys():
	print(d[i]['name'])

вывод
 NSU
Alexandr Ivanov
MMF
Process finished with exit code 0

Отредактировано xam1816 (Март 2, 2021 21:57:17)

Онлайн

  • Начало
  • » Python для новичков
  • » Добавление в словарь. Как автоматически менять названия ключей при добавлении в словарь, если данные ключи уже существуют? [RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version