@Smeilz1
За любое развитие

Как получить из словаря лист со словарями, не потеряв при этом ключи?

Я снова застрял =( Есть такой словарь. Ключи -имена, значения - листы
{'BTC': [(None, None), (1, -0.4), (3, 0.3333333333333333), (0, 0.75), (1, None)], 'ETH': [(None, None), (0, 0.5), (0, 0.3333333333333333), (0, -0.1), (2, None)]}

Я хочу превратить его в лист из 4 словарей. Я понимаю, что если бы это был list, то можно сделать функцию zip и все, но как при этом сохранить ключи?
[{'BTC': (None, None), 'ETH': (None, None)}, {'BTC':  (1, -0.4), 'ETH': (0, 0.5)}, {'BTC': (3, 0.3333333333333333), 'ETH': (0, -0.1)}, {'BTC': (1, None), 'ETH':  (2, None)}]


Пока догадался конвертировать словарь в лист, и потом сделать list(zip(BTC, ETH)) и получаем нужное преобразование, но теряем ключи при этом. =(
P.S. Код
# Получаем на вход
{'BTC': [(None, None), (1, -0.4), (3, 0.3333333333333333), (0, 0.75), (1, None)], 'ETH': [(None, None), (0, 0.5), (0, 0.3333333333333333), (0, -0.1), (2, None)]}

def find_state(state):
    coins = []
# Тут нужен список
    all_list = [{'BTC': (None, None), 'ETH': (None, None)}, {'BTC':  (1, -0.4), 'ETH': (0, 0.5)}, {'BTC': (3, 0.3), 'ETH': (0, -0.1)}, {'BTC': (1, None), 'ETH':  (2, None)}] # чтобы считать только state для конкретного случая
    for day in all_list:
        for coin in day:
            if day[coin][0] != None and state == 0 and day[coin][0] > 0:
                coins.append(coin)
            elif day[coin][0] != None and state == 1 and day[coin][0] <= 0:
                coins.append(coin)
    return coins

print(find_state(0))
  • Вопрос задан
  • 191 просмотр
Решения вопроса 1
На самом деле, можно использовать все тот же zip
d ={'BTC': [(None, None), (1, -0.4), (3, 0.3333333333333333), (0, 0.75), (1, None)], 'ETH': [(None, None), (0, 0.5), (0, 0.3333333333333333), (0, -0.1), (2, None)]}

[dict(zip(d.keys(), v)) for v in zip(*d.values())]

[{'BTC': (None, None), 'ETH': (None, None)},
 {'BTC': (1, -0.4), 'ETH': (0, 0.5)},
 {'BTC': (3, 0.3333333333333333), 'ETH': (0, 0.3333333333333333)},
 {'BTC': (0, 0.75), 'ETH': (0, -0.1)},
 {'BTC': (1, None), 'ETH': (2, None)}]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы