Я хочу отсортировать данные из файла 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"
}
}
Комментариев нет:
Отправить комментарий