Django Отдых / Сумма значений ответов одинаковых монет - PullRequest
0 голосов
/ 11 апреля 2020

из API, я получаю несколько записей на одну монету.

Как правильно обобщить и добавить их в Wallet.objects ()? Теперь у меня есть такой код, и он просто перезаписывает старое значение монетой ноль.

Пример: у меня есть ответ

{"coin":"BIP","value":"5"}
{"coin":"ZERO","value":"4"}
{"coin":"BIP","value":"15"}
{"coin":"INSIDER","value":"24"}
{"coin":"BIP","value":"41"}

Я хочу добавить в базу данных из этого ответа:

"coin":"BIP","value":"61"
"coin":"ZERO","value":"4"
"coin":"INSIDER","value":"24"

Его сумма всего BIP (5 + 15 + 41). И другие монеты. Как?

Мой Wallet.objects теперь не может сложить эту сумму

obj, created = Wallet.objects.update_or_create(user=user, coin_id_id=coin.id, defaults={'amount_d': amount_d, 'amount_w': 0, 'cap_w': 0, 'cap_d': capitalize_d},)
    obj.save()

Пожалуйста, помогите. Tahanks!

1 Ответ

2 голосов
/ 11 апреля 2020
coins = [
    {'coin': "A", 'value': 2},
    {'coin': "B", 'value': 5},
    {'coin': "A", 'value': 1},
    {'coin': "A", 'value': 3},
]

new = {}
for c in coins:
    coin_name = c.get("coin")
    coin_value = c.get("value", 0)

    new[coin_name] = new.get(coin_name, 0) + coin_value

coin = []
for key in new:
    coin.append({'coin': key, 'value': new[key]})

print(coin)

Результат:

[{'coin': 'A', 'value': 6}, {'coin': 'B', 'value': 5}]

Изменить: (добавлено значение bip_)

coins = [
    {'coin': "A", 'value': 2, 'bip_value': 1},
    {'coin': "B", 'value': 5, 'bip_value': 2},
    {'coin': "A", 'value': 1, 'bip_value': 3},
    {'coin': "A", 'value': 3, 'bip_value': 4},
]

new = {
    'coin': {},
    'bip': {}
}

for c in coins:
    coin_name = c.get("coin")
    coin_value = c.get("value", 0)
    bip_value = c.get("bip_value", 0)

    new['coin'][coin_name] = new['coin'].get(coin_name, 0) + coin_value
    new['bip'][coin_name] = new['bip'].get(coin_name, 0) + bip_value

coin = []
for key in new['coin']:
    coin.append({'coin': key, 'value': new['coin'][key], 'bip_value': new['bip'][key]})

print(coin)

Результат:

[{'coin': 'A', 'value': 6, 'bip_value': 8}, {'coin': 'B', 'value': 5, 'bip_value': 2}]
...