Метод setdefault
Решал задачку и не прошло решение,но потом решил ее и вернулся, чтобы разобраться,но пока не понял до конца.
Код №1:
text = 'footballcyberpunkextraterritorialityconversationalistblockophthalmoscopicinterdependencemamauserfff'
result = {}
for i in text:
result.setdefault(i,0) + 1
print(result)
В задаче надо посчитать кол-во повтора букв и в этом коде метод setdefault добавляет в словарь result одни нули каждой букве, но не прибавляет 1(ну или не учитывает, хз).
код №2:
text = 'footballcyberpunkextraterritorialityconversationalistblockophthalmoscopicinterdependencemamauserfff'
result = {}
for i in text:
result.setdefault(i)
print(result)
тут в ответе у всех букв значение None.
Код №3:
text = 'footballcyberpunkextraterritorialityconversationalistblockophthalmoscopicinterdependencemamauserfff'
result = {}
for i in text:
result.setdefault(i) + 1
print(result)
Тут у нас появляется ошибка "TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'" и мы узнаем, что нельзя сложить None и цифру 1,делаем вывод что цифра 1 видна, но в коде №1, она почему то не складывается с нулем.
Ответы (1 шт):
Можно исправить так - в данном случае результат сложения используется, а не теряется
result[i] = result.setdefault(i, 0) + 1
Но более логично написать
result[i] = result.get(i,0) + 1
На мой взгляд, легче читается с проверкой:
for i in text:
if i in result:
result[i] += 1
else:
result[i] = 1
print(result)
Можно упростить с defaultdict
(указывается тип value)
from collections import defaultdict
result = defaultdict(int)
for i in text:
result[i] += 1
Ещё проще использовать Counter:
from collections import Counter
r = Counter(text)
print(r)