Как стать автором
Обновить

Функция setdefault() в Python: для чего нужна и как её использовать

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров7.7K
Всего голосов 19: ↑14 и ↓5+12
Комментарии12

Комментарии 12

В 3 и 4 примерах в код-е пропущен for, на скринах они присутствуют

Поправили, спасибо!

Вот только каждый раз создавать большой объект при вызове setdefault может быть накладным. И код с defaultdict будет имхо проще и понятней.

Поддерживаю

Пример 2 меняем на defaultdict, получается сильно проще

from collections import defaultdict

fruit_list = ["apple", "banana", "apple", "orange", "banana", "apple"]

fruit_count = defaultdict(int)

for fruit in fruit_list:
    fruit_count[fruit] += 1

print(fruit_count)  # {'apple': 3, 'banana': 2, 'orange': 1}

Пример 3

from collections import defaultdict

grades = defaultdict(dict)

students = [
    ("Alice", "Math", "A"),
    ("Bob", "Math", "B"),
    ("Alice", "Science", "A"),
    ("Bob", "Science", "C"),
]

for name, subject, grade in students:
    grades[name][subject] = grade

print(grades)

Пример 4

from mypy.binder import defaultdict

student_scores = [
    ("Alice", 85),
    ("Bob", 92),
    ("Alice", 88),
    ("Bob", 95),
]

scores = defaultdict(list)

for name, score in student_scores:
    scores[name].append(score)

print(scores)

Спасибо, а то всю статью голову ломал: вроде и использовал этот метод, но всё было проще, а это, оказывается, я с defaultdict перепутал =)

Виртуально поставил минус:

1) Статья переведена, но комментарии на английском

2) Результат выполнения программы я должен парсить со скрина (код в котором ещё и отличается от кода в тексте, как заметили выше)

3) Примеры высосаны из пальца и на статью не катит ИМХО

Я понимаю, что некоторые претензии не к переводчику, но я не знаю, какая тут политика голосования за переводы --- считаю, что я оцениваю конечный продукт.

Виртуально поставил минус


Так поставьте реальный. Главная причина статьи это рекламные ссылки.
Если слабые статьи от компаний будут уходить в минус, то возможно компания пересмотрит свою политику по качеству.

Не могу -- не хватает кармы.

Эффективнее на мой взгляд использовать collections.defaultdict. В этом случае обращаться можно напрямую по ключу без дополнительного вызова функции.

А чем отличается от get?

someDict.get(key, None)

Так как set default возвращает значение, то в 3 примере можно зачейнить

grades.setdefault(name, {}).setdefault(subject, grade)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий