data = {}
vega = {}
for coin in ['BTC']:
vega[coin] = {}
data[coin] = {}
data[coin]['columns']=['27-Apr-24', '28-Apr-24', '29-Apr-24', '03-May-24', '10-May-24', '17-May-24', '31-May-24']
for expiry in data[coin]['columns']:
vega[coin][expiry] = data[coin].get('Vega', {}).get('Total', {}).get(expiry, 0)
for coin in ['BTC']:
data[coin]['columns']=['27-Apr-24', '28-Apr-24', '29-Apr-24', '03-May-24', '10-May-24', '17-May-24', '31-May-24', '28-Jun-24']
for expiry in data[coin]['columns']:
vega[coin][expiry] += data[coin].get('Vega', {}).get('Total', {}).get(expiry, 0)
Я инициализирую dict и даю значения, если ключ отсутствует.
Но однако, получив
KeyError: '28-Jun-24'
в последней строке почему?
Может ли кто-нибудь помочь мне понять ошибку, которую я здесь делаю?
в первом нет срока действия 28 июня, во втором есть. Можем ли мы исправить это с помощью dict по умолчанию?
Вы можете использовать vega[coin] = collections.defaultdict(int)
в первом цикле.
Просто перейди с
vega[coin][expiry] += data[coin].get('Vega', {}).get('Total', {}).get(expiry, 0)
к
vega[coin][expiry] = vega.get(coin, {}).get(expiry, 0) + data[coin].get('Vega', {}).get('Total', {}).get(expiry, 0)
и вы не получите ошибку.
Но обратите внимание, что вы не инициализировали его с помощью 28-Jun-24
.
Это работает и исправляет, но не могли бы вы помочь мне с диктовкой по умолчанию?
Посмотрите здесь, может поможет. Попробуйте реализовать это и опубликуйте свои проблемы на StackOverflow.
Этот код несколько избыточен, в любом случае быстрое решение — добавить «28-Jun-24» в первое назначение data[coin]['columns'].
data[coin]['columns']=['27-Apr-24', '28-Apr-24', '29-Apr-24', '03-May-24', '10-May-24', '17-May-24', '31-May-24','28-Jun-24']
Это сработает
эта часть:
vega[coin][expiry] +=
. Оператор+=
повторяет левую часть. Пример:x += 1
совпадает сx = x + 1
. Если у вас нет инициализацииx
, вы получите эту ошибку. Вы можете сделать что-то какvega[coin][expiry] = vega.get(coin, {}).get(expiry, 0) + data[coin].get('Vega', {}).get('Total', {}).get(expiry, 0)