Изменение словарей JSON путем удаления Python

#json #python-3.x #function #dictionary #format

Вопрос:

Я пытаюсь написать фрагмент кода, в котором он отфильтровывает значения RSI, MOM, MOM_RSI в файле Json и фильтрует по Status . Я хочу избавиться от ценностей, которые имеют Status ACTIVE значение «о», и избавиться от тех, которые имеют статус «о PAUSED «. Как я смогу это сделать?

Код:

 def reading(): 
    with open('data.json') as f:
        data = json.load(f)
    return data
reading()
 

Ожидаемый Результат:

 {
    "RSI": [
      {
        "TradingPair": "BTCUSD",
        "Status": "ACTIVE",
      }
    ],
    "MOM_RSI":[
        {
            "TradingPair": "BTCUSDT",
            "Status": "ACTIVE",
        }
    ]
}
 

Файл JSON:

 {
    "RSI": [
      {
        "TradingPair": "BTCUSD",
        "Status": "ACTIVE",
      }
    ],
    "MOM":[
        {
            "TradingPair": "BCHUSDT",
            "Status": "PAUSED",
        }
    ],
    "MOM_RSI":[
        {
            "TradingPair": "BTCUSDT",
            "Status": "ACTIVE",
        }
    ]
}
 

Ответ №1:

Прочитайте данные. Вы тоже можете использовать свою функцию

 >>> with open('data.json') as f:
        data = json.load(f)
 

Создайте словарь с именем результат.

 >>> result = {}
 

Затем просмотрите ключи данных, просмотрите каждый словарь в этом
отфильтрованном списке, если статус есть 'ACTIVE' , затем либо добавьте result[filter_key] , если ключ уже существует result , либо создайте ключ для этого ключа фильтра.

 >>> for filter_key in data.keys():
        for d in data[filter_key]:
            if d['Status'] == 'ACTIVE':
                try:
                    result[filter_key].append(d)
                except KeyError:
                    result[filter_key] = [d]
>>> result
{'RSI': [{'TradingPair': 'BTCUSD', 'Status': 'ACTIVE'}],
 'MOM_RSI': [{'TradingPair': 'BTCUSDT', 'Status': 'ACTIVE'}]}
 

Комментарии:

1. Есть ли способ, которым я мог бы сделать ['RSI', 'MOM', 'MOM_RSI'] модульный, чтобы он автоматически корректировался по длине, а не указывал список как есть.

2. Конечно. Отредактировал мой пост.