Мониторинг переводов между счетами python + dict + разные валюты

Рейтинг: -1Ответов: 1Опубликовано: 28.02.2023

Есть 4 словаря-счета на бирже. С парами валюта - кво:

спот = {'dol': 10.0, 'eur': 22.0, 'lir': 34.0, 'cny': 45.0}
маржа = {'dol': 1.2, 'eur': 1.8, 'lir': 35.3, 'cny': 4.2}
крос = {'dol': 12.5, 'eur': 25.0, 'lir': 23.9, 'cny': 43.4}
фьюч = {'dol': 13.3, 'eur': 25.2, 'lir': 36.1, 'cny': 38.8}

Есть код который показывает из какого счета в какой был произведен перевод:

import copy

p_dict = {'spot': {'dol': 10.0, 'eur': 22.0, 'lir': 34.0, 'cny': 45.0},
          'marja': {'dol': 1.2, 'eur': 1.8, 'lir': 35.3, 'cny': 4.2},
          'cross': {'dol': 12.5, 'eur': 25.0, 'lir': 23.9, 'cny': 43.4},
          'future': {'dol': 13.3, 'eur': 25.2, 'lir': 36.1, 'cny': 38.8}}

n_dict = copy.deepcopy(p_dict)
n_dict['spot']['dol'] -= 1
n_dict['cross']['dol'] += 1

oper = None
for k1, v1 in n_dict.items():
    for k2, v2 in v1.items():
        v3 = p_dict[k1][k2]
        if v2 != v3:
            if oper is not None and abs(v2 - v3) == abs(oper[0]):
                print(f'Произошел перевод между счетами `{k1}` и `{oper[1]}`, валюта `{k2}` на {abs(oper[0])} ед.')
            else:
                oper = v3 - v2, k1

Нужно сделать так чтобы работало даже при разных валютах на счетах, к примеру если в словаре cross находиться dol а остальные валюты другие (проверил выдает KeyError). Буду рад помощи

Ответы

▲ 0

Нужно было просто добавить проверку на наличие ключа в словаре:

for k1, v1 in n_dict.items():
    for k2, v2 in v1.items():
        if k2 in p_dict[k1]:
            v3 = p_dict[k1][k2]
            if v2 != v3:
                if oper is not None and abs(v2 - v3) == abs(oper[0]):
                    print(f'Произошел перевод между счетами `{k1}` и `{oper[1]}`, валюта `{k2}` на {abs(oper[0])} ед.')
                else:
                    oper = v3 - v2, k1