Выборка из json в python

имеется json формата

{
  "tokens": {
    "0x006bea43baa3f7a6f765f14f10a1a1b08334ef45": {
      "symbol": "STX",
      "name": "Stox",
      "address": "0x006bea43baa3f7a6f765f14f10a1a1b08334ef45",
      "decimals": 18,
      "logoURI": "https://tokens.1inch.io/0x006bea43baa3f7a6f765f14f10a1a1b08334ef45.png"
    },
    "0x0327112423f3a68efdf1fcf402f6c5cb9f7c33fd": {
      "symbol": "BTC++",
      "name": "PieDAO BTC++",
      "decimals": 18,
      "address": "0x0327112423f3a68efdf1fcf402f6c5cb9f7c33fd",
      "logoURI": "https://tokens.1inch.io/0x0327112423f3a68efdf1fcf402f6c5cb9f7c33fd.png"
    },
    "0x0417912b3a7af768051765040a55bb0925d4ddcf": {
      "symbol": "LID",
      "name": "Liquidity Dividends Protocol",
      "address": "0x0417912b3a7af768051765040a55bb0925d4ddcf",
      "decimals": 18,
      "logoURI": "https://tokens.1inch.io/0x0417912b3a7af768051765040a55bb0925d4ddcf.png"
    },
    "0x04fa0d235c4abf4bcf4787af4cf447de572ef828": {
      "symbol": "UMA",
      "name": "UMA Voting Token v1",
      "decimals": 18,
      "address": "0x04fa0d235c4abf4bcf4787af4cf447de572ef828",
      "logoURI": "https://tokens.1inch.io/0x04fa0d235c4abf4bcf4787af4cf447de572ef828.png"
    }
  }
}

требуется, зная значение 'name' вывести для него 'address'

имеется некоторый список {'aa','bb',...)

Требуется пробежать по json и на каждое соответствие "name" и списка выдать значение "address"

Подскажите, пожалуйста, в каком направлении копать.

Пробовал по аналогии с данным вопросом: https://ru.stackoverflow.com/questions/1074686/Выборка-с-json-python , но уперся в отличие формата. Там:

{
 {...},
 {...}
}

А у меня

{tokens:
 {0x...: 
  {...}}
 ,{0x...: {...}
   } }

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

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

Я прямо рекурсивный перебор словарей сделал, хотя может он тут и излишен:

jsn = {'tokens': {
  '0x006bea43baa3f7a6f765f14f10a1a1b08334ef45': {'address': '0x006bea43baa3f7a6f765f14f10a1a1b08334ef45',
   'decimals': 18,
   'logoURI': 'https://tokens.1inch.io/0x006bea43baa3f7a6f765f14f10a1a1b08334ef45.png',
   'name': 'Stox',
   'symbol': 'STX'},
  '0x0327112423f3a68efdf1fcf402f6c5cb9f7c33fd': {'address': '0x0327112423f3a68efdf1fcf402f6c5cb9f7c33fd',
   'decimals': 18,
   'logoURI': 'https://tokens.1inch.io/0x0327112423f3a68efdf1fcf402f6c5cb9f7c33fd.png',
   'name': 'PieDAO BTC++',
   'symbol': 'BTC++'},
  '0x0417912b3a7af768051765040a55bb0925d4ddcf': {'address': '0x0417912b3a7af768051765040a55bb0925d4ddcf',
   'decimals': 18,
   'logoURI': 'https://tokens.1inch.io/0x0417912b3a7af768051765040a55bb0925d4ddcf.png',
   'name': 'Liquidity Dividends Protocol',
   'symbol': 'LID'},
  '0x04fa0d235c4abf4bcf4787af4cf447de572ef828': {'address': '0x04fa0d235c4abf4bcf4787af4cf447de572ef828',
   'decimals': 18,
   'logoURI': 'https://tokens.1inch.io/0x04fa0d235c4abf4bcf4787af4cf447de572ef828.png',
   'name': 'UMA Voting Token v1',
   'symbol': 'UMA'}
   }}

def find_name_addr(jsn):
    if 'name' in jsn and 'address' in jsn:
        yield jsn['name'], jsn['address']
    for k in jsn:
        if isinstance(jsn[k], dict):
            for t in find_name_addr(jsn[k]):
                yield t

tofind = ['PieDAO BTC++', 'UMA Voting Token v1']
for name, addr in find_name_addr(jsn):
    if name in tofind:
        print(f'{name} -> {addr}')

Вывод:

PieDAO BTC++ -> 0x0327112423f3a68efdf1fcf402f6c5cb9f7c33fd
UMA Voting Token v1 -> 0x04fa0d235c4abf4bcf4787af4cf447de572ef828
→ Ссылка