GOOGLE ADS

воскресенье, 8 мая 2022 г.

Сортировка данных JSON на основе определенного слова в свойстве объекта

Я хочу отсортировать данные из файла json.

У меня есть следующее data.jsonсодержимое файла json: каждый пакет представляет собой объект с двумя свойствами.

{
"attr_2.4.48": {
"exposed": false,
"score": "Not qualified"
},
"cockpit_218": {
"exposed": false,
"score": "partial qualified"
},
"base-passwd_3.5.29": {
"exposed": false,
"score": "Qualified"
},
"audit_2.8.5": {
"exposed": true,
"score": "partial qualified"
},
"base-files_3.0.14": {
"exposed": false,
"score": "Not qualified"
}
}

Вывод должен быть отсортирован следующим образом:

  • сначала все пакеты с"score": "Not qualified"


  • второй все пакеты с"score": "partial qualified"


  • и последние все пакеты с"score": "Qualified"


  • Каждый пакет с одним и тем же scoreдолжен быть отсортирован в алфавитном порядке.

    Отсортированные данные должны выглядеть так:

    {
    "attr_2.4.48": {
    "exposed": false,
    "score": "Not qualified"
    },
    "base-files_3.0.14": {
    "exposed": false,
    "score": "Not qualified"
    },
    "audit_2.8.5": {
    "exposed": true,
    "score": "partial qualified"
    },
    "cockpit_218": {
    "exposed": false,
    "score": "partial qualified"
    },
    "base-passwd_3.5.29": {
    "exposed": false,
    "score": "Qualified"
    }
    }

    Моя проблема на данный момент заключается в том, что я не знаю, как сортировать данные на основе socreзначения.

    Мой код сортирует пакеты только по scoreзначению в алфавитном порядке:

    with open(data.json, 'r', encoding='utf-8') as json_file:
    json_content = json.load(json_file)
    package = content.keys()
    sorted_content = sorted(package, key=lambda ip: content[ip]['score'], reverse=False)

    Как я могу обновить свой код, чтобы данные выглядели так, как показано выше?


    Решение проблемы

    Если json_contentэто ваш проанализированный файл json, вы можете сделать:

    from collections import OrderedDict
    order = ["Not qualified", "partial qualified", "Qualified"]
    json_content = OrderedDict(
    sorted(
    json_content.items(), key=lambda i: (order.index(i[1]["score"]), i[0])
    )
    )
    print(json.dumps(json_content, indent=4, sort_keys=False))

    Отпечатки:

    {
    "attr_2.4.48": {
    "exposed": false,
    "score": "Not qualified"
    },
    "base-files_3.0.14": {
    "exposed": false,
    "score": "Not qualified"
    },
    "audit_2.8.5": {
    "exposed": true,
    "score": "partial qualified"
    },
    "cockpit_218": {
    "exposed": false,
    "score": "partial qualified"
    },
    "base-passwd_3.5.29": {
    "exposed": false,
    "score": "Qualified"
    }
    }

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

    Отправить комментарий

    Laravel Datatable addColumn returns ID of one record only

    Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...