Python упростить конструкцию

Подскажите пожалуйста как можно упростить функцию для кода. Я всю голову уже сломал. Допустим, у меня есть класс с атрибутами:

self.count = 0
self.dount = 0
self.mount = 0
self.kount = 0

И есть например две функции одна прибавляет значения проходя по циклу, а другая отнимает:

for key, value in dicti.items(): 
    if key == '+':
        check_pl(value)
    elif == '-':
        check_ms(value)


def check_pl(value): 
    if value == 'ons':
        self.count += 1
    if value == 'ions':
        self.dount += 1
    if value == 'sions':
        self.mount += 1
    if value == 'visions':
        self.kount += 1

def check_ms(value): 
    if value == 'ons':
        self.count -= 1
    if value == 'ions':
        self.dount -= 1
    if value == 'sions':
        self.mount -= 1
    if value == 'visions':
        self.kount -= 1

Возможно ли упростить эту функцию, чтобы не было такой длинной портянки кода, потому что получается есть 2 функции эти почти одинаковые и куча переменных дублирующихся?


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

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

Создаете словарь, например:

func_dict={'ons':self.count, 'ions':self.dount, 'sions':self.mount, 'visions':self.kount}

затем в функциях делаете

def check_pl(value):
    func_dict[value]+=1

def check_ms(value):
    func_dict[value]-=1

вообще, по-хорошему, нужно возвращать словарь в явном виде как-то так:

for key, value in dicti.items(): 
    if key == '+':
        func_dict = check_pl(value)
    elif == '-':
        func_dict = check_ms(value)

а далее

def check_pl(value, func_dict=func_dict):
    func_dict[value]+=1
    return func_dict

UPDATE as per @Stanislav Volodarskiy:
очевидно, имеет смысл вообще избавиться от переменных, и просто хранить данные в словаре.

→ Ссылка