Как вычислить значение ключа словаря из значений других ключей этого же словаря?
Как тут в k0 получить сумму k1 и k2?
raznoe = {
#коэффициент относительной аварийности (количество дорожно-транспортных происшествий в расчете на 1 млн автомобиле-километров)
'k0': raznoe['k1']+raznoe['k2'], #автомагистраль
'k1': 0.25, #многополосная дорога с разделительной полосой
'k2': 0.29, #многополосная дорога без разделительной полосы
'k3': 0.42, #двухполосная дорога и прочие категории дорог
'calc_k4': None, #Ставка дисконтирования
'calc_k5': None, #количество торговых дней в квартале, предшествующем кварталу проведения оценки, в течение которых осуществлялись торги с использованием системы электронных торгов публичного акционерного общества «Московская биржа ММВБ-РТС»
'k6': 1, #Индекс дня
}
Понятное дело, что это можно сделать после формирования словаря, просто его дополнив потом, но может можно сделать как то на лету, во время первичного формирования словаря? Возможно для этого есть что то типо this?
Ответы (2 шт):
Автор решения: Spartak
→ Ссылка
Я пришёл к выводу, что это невозможно в контексте словаря, так как сам словарь, а значит и его ключи со значениями, еще не инициализированы в этот момент. Только классом если делать. Вопрос снят.
Автор решения: Roman-Stop RU aggression in UA
→ Ссылка
Можно сделать ленивое вычисление значений используя вспомогательную функцию:
class ThisAccessor:
def __init__(self, accessor):
self.accessor = accessor
def __call__(self, this):
return self.accessor(this)
def dict_calc(d):
return {k:v(d) if isinstance(v, ThisAccessor) else v for k, v in d.items()}
raznoe = dict_calc({
'k0': ThisAccessor(lambda this: this['k1']+this['k2']),
'k1': 0.25,
'k2': 0.29,
})
Если в словаре будут только значения и функций не будет, то можно обойтись без ThisAccessor:
def dict_calc(d):
return {k:v(d) if callable(v) else v for k, v in d.items()}
raznoe = dict_calc({
'k0': lambda this: this['k1']+this['k2'],
'k1': 0.25,
'k2': 0.29,
})