как извлечь из ответа 'balanceUSD'

import requests
from requests.structures import CaseInsensitiveDict


url = "https://api.zapper.fi/v2/balances?addresses%5B%5D=0x66a188b9662ca2cd259d1145fec21be988850c88&networks%5B%5D=ethereum&networks%5B%5D=polygon&bundled=false"

headers = CaseInsensitiveDict()
headers["Authorization"] = "Basic"

r = requests.get(url, headers=headers).text
print(r)

Мне нужно извлечь из ответа все значения баланса в долларах без повторов.

Ответ:

event: balance data: {
  "appId": "tokens",
  "network": "ethereum",
  "addresses": [
    "0x66a188b9662ca2cd259d1145fec21be988850c88"
  ],
  "balance": {
    "deposits": {},
    "debt": {},
    "vesting": {},
    "wallet": {
      "2242939522": {
        "key": "2242939522",
        "appId": "tokens",
        "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
        "network": "ethereum",
        "balanceUSD": 3.6345270000000003,
        "metaType": "supplied",
        "displayProps": {
          "label": "WETH",
          "secondaryLabel": null,
          "tertiaryLabel": null,
          "images": [],
          "stats": [],
          "info": [
            {
              "label": {
                "type": "string",
                "value": "App"
              },
              "value": {
                "type": "string",
                "value": "Tokens"
              }
            }
          ],
          "balanceDisplayMode": "default"
        },
        "type": "token",
        "contractType": "app-token",
        "context": {
          "symbol": "WETH",
          "balance": 0.00205,
          "decimals": 18,
          "balanceRaw": "2050000000000000",
          "price": 1772.94
        },
        "breakdown": []
      },
      "2616394601": {
        "key": "2616394601",
        "appId": "tokens",
        "address": "0x0000000000000000000000000000000000000000",
        "network": "ethereum",
        "balanceUSD": 187.79718251200956,
        "metaType": "supplied",
        "displayProps": {
          "label": "ETH",
          "secondaryLabel": null,
          "tertiaryLabel": null,
          "images": [],
          "stats": [],
          "info": [
            {
              "label": {
                "type": "string",
                "value": "App"
              },
              "value": {
                "type": "string",
                "value": "Tokens"
              }
            }
          ],
          "balanceDisplayMode": "default"
        },
        "type": "token",
        "contractType": "app-token",
        "context": {
          "symbol": "ETH",
          "balance": 0.10592416128690736,
          "decimals": 18,
          "balanceRaw": "105924161286907352",
          "price": 1772.94
        },
        "breakdown": []
      }
    },
    "claimable": {},
    "locked": {},
    "nft": {}
  },
  "totals": [
    {
      "key": "2242939522",
      "type": "app-token",
      "network": "ethereum",
      "balanceUSD": 3.6345270000000003
    },
    {
      "key": "2616394601",
      "type": "app-token",
      "network": "ethereum",
      "balanceUSD": 187.79718251200956
    }
  ],
  "errors": []
}
event: balance data: {
  "appId": "tokens",
  "network": "polygon",
  "addresses": [
    "0x66a188b9662ca2cd259d1145fec21be988850c88"
  ],
  "balance": {
    "deposits": {},
    "debt": {},
    "vesting": {},
    "wallet": {},
    "claimable": {},
    "locked": {},
    "nft": {}
  },
  "totals": [],
  "errors": []
}

Ответы (2 шт):

Автор решения: elderberry17

Код у меня не запускается из-за отсутсвия нужного API key, но из приведенного вами словаря кажется, что ответ может быть похож на:

print(r['balance data']['balance']['wallet']['2242939522']['balanceUSD'])

Судя по всему, '2242939522' -- какой-то банковский ID или номер счета, потому что в словаре, соответствующему ключу wallet не один подобный номер, каждому из которых ставится в соответствие свой словарь с нужным вам ключом 'balanceUSD'

→ Ссылка
Автор решения: elderberry17

Воспользуемся регулярными выражениями:

import re

pattern = r'balanceUSD":.*?[},]'
worker = re.compile(pattern)
data = worker.findall(string)
data = list(map(lambda x: float(x[12:-1]), data))

# если хотите взять только уникальные:
data = list(set(data))

print(data)

string -- ваша чудесная строка) то есть по сути переменная r

→ Ссылка