我正在尝试使用 Python 对 JSON 对象进行排序。
我有以下对象:
{
"text": "hello world",
"predictions":
[
{"class": "Class 1", "percentage": 4.63},
{"class": "Class 2", "percentage": 74.68},
{"class": "Class 3", "percentage": 9.38},
{"class": "Class 4", "percentage": 5.78},
{"class": "Class 5", "percentage": 5.53}
]
}
我希望有这个对象:
{
"text": "hello world",
"predictions":
[
{"class": "Class 2", "percentage": 74.68},
{"class": "Class 3", "percentage": 9.38},
{"class": "Class 4", "percentage": 5.78},
{"class": "Class 5", "percentage": 5.53},
{"class": "Class 1", "percentage": 4.63}
]
}
事实上,我想按百分比排序我的对象数组。
我试过这个命令:
sorted_obj = sorted(json_obj['predictions'], key=lambda k: k['percentage'], reverse=True)
我有这个错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: string indices must be integers
需要任何帮助,
由于
答案 0 :(得分:5)
您可以使用sorted
对值进行排序,如下所示:
json_obj = {
"text": "hello world",
"predictions":
[
{"class": "Class 1", "percentage": 4.63},
{"class": "Class 2", "percentage": 74.68},
{"class": "Class 3", "percentage": 9.38},
{"class": "Class 4", "percentage": 5.78},
{"class": "Class 5", "percentage": 5.53}
]
}
sorted_obj = dict(json_obj)
sorted_obj['predictions'] = sorted(json_obj['predictions'], key=lambda x : x['percentage'], reverse=True)
print(sorted_obj)
print(json_obj)
这将导致:
# The sorted values based on 'predictions' -> 'percentage'
{'predictions': [{'percentage': 74.68, 'class': 'Class 2'}, {'percentage': 9.38, 'class': 'Class 3'}, {'percentage': 5.78, 'class': 'Class 4'}, {'percentage': 5.53, 'class': 'Class 5'}, {'percentage': 4.63, 'class': 'Class 1'}], 'text': 'hello world'}
# The original json_obj will remain unchanged as we have created a new object sorted_obj from values of json_obj using dict()
{'text': 'hello world', 'predictions': [{'class': 'Class 1', 'percentage': 4.63}, {'class': 'Class 2', 'percentage': 74.68}, {'class': 'Class 3', 'percentage': 9.38}, {'class': 'Class 4', 'percentage': 5.78}, {'class': 'Class 5', 'percentage': 5.53}]}
答案 1 :(得分:1)
你几乎是对的,你可能想要创建一个字典副本,然后将predictions
的值替换为已排序的对象。我假设您要保持原始json_obj
不变,因此deepcopy
(尽管如果我们只是进行重新分配而不是就地.sort
,则没有必要。)< / p>
>>> json_obj = {
... "text": "hello world",
... "predictions":
... [
... {"class": "Class 1", "percentage": 4.63},
... {"class": "Class 2", "percentage": 74.68},
... {"class": "Class 3", "percentage": 9.38},
... {"class": "Class 4", "percentage": 5.78},
... {"class": "Class 5", "percentage": 5.53}
... ]
... }
>>> from copy import deepcopy
>>> sorted_json_obj = deepcopy(json_obj)
>>> sorted_json_obj['predictions'] = sorted(json_obj['predictions'], key=lambda k: k['percentage'], reverse=True)
>>> sorted_json_obj
{'predictions': [{'class': 'Class 2', 'percentage': 74.68},
{'class': 'Class 3', 'percentage': 9.38},
{'class': 'Class 4', 'percentage': 5.78},
{'class': 'Class 5', 'percentage': 5.53},
{'class': 'Class 1', 'percentage': 4.63}],
'text': 'hello world'}