Правильно ли я нашла ключ с максимальным значением словаря в классе?
Всем привет я только начала знакомиться с классами и решила попытаться сделать свое первое упражнение, оно работает, но я не знаю правильный ли код.
Текст упражнения
С использованием класса 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 шт):
Ключ '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