You are currently viewing Словарь Python | метод fromkeys()

Словарь Python | метод fromkeys()

Функция Python dictionary fromkeys() возвращает словарь с сопоставленным ключом и определенным значением. Он создает новый словарь из заданной последовательности с определенным значением.

Синтаксис : fromkeys(seq, val)
Параметры:
seq (далее): Последовательность, которая должна быть преобразована в словарь.

val: Начальные значения, которые необходимо присвоить сгенерированным ключам. По умолчанию значение Нет.

Returns (Возвращает): словарь с ключами, сопоставленными с None, если значение не указано, или со значением, указанным в поле

Пример метода Python Dictionary fromkeys()

Пример 1: Демонстрация работы fromkeys()

# Python 3 code to demonstrate
# working of fromkeys()

# initializing sequence
seq = {'a', 'b', 'c', 'd', 'e'}

# using fromkeys() to convert sequence to dict
# initializing with None
res_dict = dict.fromkeys(seq)

# Printing created dict
print("The newly created dict with None values : " + str(res_dict))


# using fromkeys() to convert sequence to dict
# initializing with 1
res_dict2 = dict.fromkeys(seq, 1)

# Printing created dict
print("The newly created dict with 1 as value : " + str(res_dict2))

Выход:

Вновь созданный диктант со значениями None: {‘d’: None, ‘a’: None, ‘b’: None, ‘c’: None, ‘e’: None}
Вновь созданный диктант со значением 1 : {‘d’: 1, ‘a’: 1, ‘b’: 1, ‘c’: 1, ‘e’: 1}

Поведение из fromdict() с изменяемыми объектами в качестве значений

fromdict() также может быть снабжен изменяемым объектом в качестве значения по умолчанию. Но в этом случае выполняется глубокая копия словаря, т. е. если мы добавим значение в исходный список, добавление будет происходить во всех значениях ключей.

Профилактика: Определенные методы понимания словаря могут быть использованы для создания нового списка в качестве значений ключей, которые не указывают на исходный список в качестве значений ключей.

Пример 2: Демонстрация поведения с изменяемыми объектами

# Python 3 code to demonstrate
# behaviour with mutable objects

# initializing sequence and list
seq = {'a', 'b', 'c', 'd', 'e'}
lis1 = [2, 3]

# using fromkeys() to convert sequence to dict
# using conventional method
res_dict = dict.fromkeys(seq, lis1)

# Printing created dict
print("The newly created dict with list values : "
	+ str(res_dict))

# appending to lis1
lis1.append(4)

# Printing dict after appending
# Notice that append takes place in all values
print("The dict with list values after appending : "
	+ str(res_dict))

lis1 = [2, 3]
print('\n')

# using fromkeys() to convert sequence to dict
# using dict. comprehension
res_dict2 = {key: list(lis1) for key in seq}

# Printing created dict
print("The newly created dict with list values : "
	+ str(res_dict2))

# appending to lis1
lis1.append(4)

# Printing dict after appending
# Notice that append doesnt take place now.
print("The dict with list values after appending (no change) : "
	+ str(res_dict2))

Выход:

Вновь созданный диктант со значениями списка : {‘d’: [2, 3], ‘e’: [2, 3], ‘c’: [2, 3], ‘a’: [2, 3], ‘b’: [2, 3]}
Диктант со значениями списка после добавления : {‘d’: [2, 3, 4], ‘e’: [2, 3, 4], ‘c’: [2, 3, 4], ‘а’: [2, 3, 4], ‘в’: [2, 3, 4]}
Вновь созданный диктант со значениями списка : {‘d’: [2, 3], ‘e’: [2, 3], ‘c’: [2, 3], ‘a’: [2, 3], ‘b’: [2, 3]}
Дикт со значениями списка после добавления (без изменений) : {‘d’: [2, 3], ‘e’: [2, 3], ‘c’: [2, 3], ‘a’: [2, 3], ‘b’: [2, 3]}

Пример 3: Значение по умолчанию в словаре Python fromkeys()

x = ('key1', 'key2', 'key3')
y = 0

d = dict.fromkeys(x, y)

print(d)

Выход:

{'key1': 0, 'key2': 0, 'key3': 0}

Пример 4: Словарь Python fromkeys() с пустым списком

# Python3 code to demonstrate
# to initialize dictionary with list
# using fromkeys()

# using fromkeys() to construct
new_dict = dict.fromkeys(range(4), [])
	
# printing result
print ("New dictionary with empty lists as keys : " + str(new_dict))

Выход:

Новый словарь с пустыми списками в качестве ключей : {0: [], 1: [], 2: [], 3: []}