Правильно ли я нашла ключ с максимальным значением словаря в классе?

Всем привет я только начала знакомиться с классами и решила попытаться сделать свое первое упражнение, оно работает, но я не знаю правильный ли код.

Текст упражнения

С использованием класса M_set решить задачи:

a) найти символ, входящий в строку S максимальное количество раз;

b) проверить, состоят ли строки S1, S2 из одних и тех же символов, которые входят в эти строки одинаковое количество раз;

c) проверить, верно ли, что все символы строки S1, входят также в строку S2, причем не меньшее количество раз, чем у S1

Я пока сделала только а

class M_set(dict):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.__dict__ = self
a = M_set()
S = 'I love my mommm'
for a.b in S:
    a[a.b] = a.get(a.b,0)+1
#здесь я получила вот это, но я не понимаю почему 1 элемент словаря такой поэтому я решила его 
#просто удалить
del a['b']#{'b': 'm', 'I': 1, ' ': 3, 'l': 1, 'o': 2, 'v': 1, 'e': 1, 'm': 5, 'y': 1}
print(a)
print(max(a, key=a.get))

Кто видит что здесь есть какая-то ошибка, или что здесь что-то можно лучше и легче написать, напишите пожалуйста свои комментарии или коды к этому, буду очень благодарна


Ответы (1 шт):

Автор решения: gil9red

Ключ 'b' равный m у вас появился из-за a.b в цикле. До цикла у вас словарь a пустой, а при первой итерации у него появится значение 'b' = 'I', т.к. при итерации for a.b in S: в a.b будут присваиваться значения:

a.b = S[0]
a.b = S[1]
...
a.b = S[n-1]

Если не использовать a.b, то это не создаст тот ключ:

class M_set(dict):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.__dict__ = self

a = M_set()
S = 'I love my mommm'
for c in S:
    a[c] = a.get(c, 0)+1

print(a)
print(max(a, key=a.get))
# {'I': 1, ' ': 3, 'l': 1, 'o': 2, 'v': 1, 'e': 1, 'm': 5, 'y': 1}
# m

Кст, если же a.b необходимо, то это можно обойти, если у M_set убрать self.__dict__ = self, тогда присваивание в a.b не будет создавать ключ b

→ Ссылка