Comments 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)
Виртуально поставил минус:
1) Статья переведена, но комментарии на английском
2) Результат выполнения программы я должен парсить со скрина (код в котором ещё и отличается от кода в тексте, как заметили выше)
3) Примеры высосаны из пальца и на статью не катит ИМХО
Я понимаю, что некоторые претензии не к переводчику, но я не знаю, какая тут политика голосования за переводы --- считаю, что я оцениваю конечный продукт.
Эффективнее на мой взгляд использовать collections.defaultdict. В этом случае обращаться можно напрямую по ключу без дополнительного вызова функции.
А чем отличается от get?
someDict.get(key, None)
Так как set default возвращает значение, то в 3 примере можно зачейнить
grades.setdefault(name, {}).setdefault(subject, grade)
Функция setdefault() в Python: для чего нужна и как её использовать