dict.fromkeys()
Классовый метод fromkeys() создаёт новый словарь, ключами которого становятся элементы переданной последовательности (или итерируемого объекта), а значением — указанное value. Если value не задано, используется None.
Сигнатура
dict.fromkeys(iterable, value=None)
Параметры
iterable— любой итерируемый объект: список, кортеж, строка, множество и т. п. Его элементы станут ключами нового словаря.value— значение, которое будет присвоено каждому ключу. По умолчаниюNone.
Возвращаемое значение
Новый объект dict, содержащий ключи из iterable и одно и то же значение value для каждого из них.
Примеры использования
Пример 1. Базовое использование без значения.
pins = dict.fromkeys(["D2", "D3", "D4"])
print(pins)
{'D2': None, 'D3': None, 'D4': None}
Пример 2. Со значением по умолчанию.
sensors = dict.fromkeys(["temp", "humidity", "pressure"], 0)
print(sensors)
{'temp': 0, 'humidity': 0, 'pressure': 0}
Пример 3. Удаление дубликатов с сохранением порядка.
Поскольку ключи словаря уникальны, fromkeys удобно использовать для дедупликации:
raw = ["red", "green", "red", "blue", "green", "red"]
unique = list(dict.fromkeys(raw))
print(unique)
['red', 'green', 'blue']
Пример 4. Осторожно с изменяемым значением.
Если value — изменяемый объект (например, список), он будет общим для всех ключей:
data = dict.fromkeys(["a", "b", "c"], [])
data["a"].append(1)
print(data)
{'a': [1], 'b': [1], 'c': [1]}
В таком случае используйте словарное включение:
data = {k: [] for k in ["a", "b", "c"]}
data["a"].append(1)
print(data)
{'a': [1], 'b': [], 'c': []}
Пример 5. Ключи из строки.
alphabet = dict.fromkeys("ABC", True)
print(alphabet)
{'A': True, 'B': True, 'C': True}
См. также
dict.keys() — получить ключи словаря
dict.update() — обновить словарь
dict.copy() — копия словаря
Примечание
Лицензия и источники
Техническое описание метода адаптировано из официальной документации Python (https://docs.python.org), доступной под Python Software Foundation License Version 2. Перевод на русский, примеры использования и пояснения — © AlashEd Wiki.