dict.setdefault()
Метод setdefault() возвращает значение по ключу. Если ключа нет — он будет добавлен в словарь со значением default (по умолчанию None), и это же значение будет возвращено. По сути это «получить, а если нет — создать и получить».
Сигнатура
dict.setdefault(key, default=None)
Параметры
key— ключ, значение которого нужно получить или создать.default— значение, которое будет записано в словарь, еслиkeyотсутствует. По умолчаниюNone.
Возвращаемое значение
Текущее значение по ключу, если он есть. Иначе — default (и пара key: default добавляется в словарь).
Примеры использования
Пример 1. Ключ существует — значение возвращается без изменений.
d = {"baud": 9600}
value = d.setdefault("baud", 115200)
print(value)
print(d)
9600
{'baud': 9600}
Пример 2. Ключа нет — он будет добавлен.
d = {"baud": 9600}
value = d.setdefault("parity", "none")
print(value)
print(d)
none
{'baud': 9600, 'parity': 'none'}
Пример 3. Накопление в списки по ключу.
Классический паттерн группировки:
readings = [("temp", 24), ("hum", 60), ("temp", 25), ("hum", 58), ("temp", 23)]
grouped = {}
for sensor, value in readings:
grouped.setdefault(sensor, []).append(value)
print(grouped)
{'temp': [24, 25, 23], 'hum': [60, 58]}
Пример 4. Без default — добавляется None.
d = {"a": 1}
print(d.setdefault("b"))
print(d)
None
{'a': 1, 'b': None}
Пример 5. Отличие от get().
get() ничего не меняет в словаре, setdefault() добавляет ключ при его отсутствии:
d1 = {"x": 1}
d2 = {"x": 1}
d1.get("y", 0) # словарь не меняется
d2.setdefault("y", 0) # ключ "y" будет добавлен
print(d1)
print(d2)
{'x': 1}
{'x': 1, 'y': 0}
См. также
dict.get() — получить значение, не изменяя словарь
dict.update() — массовое обновление
dict.fromkeys() — создать словарь из ключей
Примечание
Лицензия и источники
Техническое описание метода адаптировано из официальной документации Python (https://docs.python.org), доступной под Python Software Foundation License Version 2. Перевод на русский, примеры использования и пояснения — © AlashEd Wiki.