由于网络服务调用,我需要显示以下输出
<button class="modal-button" href="#myModal1">Open Modal</button>
<!-- The Modal -->
<div id="myModal1" class="modal">
<!-- Modal content -->
<div class="modal-content">
<span class="close">×</span>
<img src="https://cdn-images-1.medium.com/max/1000/1*6cpWeq1_VMYtd1LgHwxKug.jpeg">
</div>
</div>
我具有以下代码来创建对象:
{
"predictions": [
{
"id": 18009,
"cuisine": "italian",
"probability": 0.17846838753494407
},
{
"id": 28583,
"cuisine": "italian",
"probability": 0.1918703125538735
}
]
}
,按字母顺序重新排列键,如下所示。
json_data = []
for i in range (0, len(predicted_labels)):
data = {}
data['id'] = int(test['id'][i])
data['cuisine'] = categoricalTransformer[predicted_labels[i]]
item = predicted_probability[i]
data['probability'] = item[predicted_labels[i]]
json_data.append(data)
json_return = {"predictions":json_data}
return jsonify(json_return)
我该怎么办?
答案 0 :(得分:2)
使用collections.defaultdict()
重建新词典,并使用collections.OrderedDict()
附加有序词典:
from collections import OrderedDict
from collections import defaultdict
from json import dumps
data = {
"predictions": [
{"id": 18009, "cuisine": "italian", "probability": 0.17846838753494407},
{"id": 28583, "cuisine": "italian", "probability": 0.1918703125538735},
]
}
key_order = ["id", "cuisine", "probability"]
result = defaultdict(list)
for dic in data["predictions"]:
ordered = OrderedDict((key, dic.get(key)) for key in key_order)
result["predictions"].append(ordered)
print(dumps(result))
# {"predictions": [{"id": 18009, "cuisine": "italian", "probability": 0.17846838753494407}, {"id": 28583, "cuisine": "italian", "probability": 0.1918703125538735}]}
json.dumps()
在这里将字典序列化为JSON格式的字符串。
注意::如果您使用的是 Python3.6 + ,则可以记住普通的字典,而不是OrderedDict()
,因为会记住键的插入顺序。但是,在3.6中它是一种实现功能,而在3.7中它是一种语言功能。您可以在Are dictionaries ordered in Python 3.6+?上了解有关此内容的更多信息。
对于最低要求Python3.6的应用程序,您可能可以依靠此功能。此外,它对于用户OrderedDict()
来说可能更安全,因此您的代码可以向后兼容所有python版本。
答案 1 :(得分:0)
您可以查看Ordered Dictionary。它会记住插入顺序,这样您就可以通过此集合来组织json。
示例:
datadict = {'a':'a', 'c':'c', 'b':'b'}
import collections
print (collections.OrderedDict(datadict))
#OrderedDict([('a':'a'), ('c':'c'), ('b':'b')])
x = collections.OrderedDict(datadict)
print (dict(x))
#{'a':'a', 'c':'c', 'b':'b'}
print (x == datadict)
#True
print (collections.OrderedDict(sorted(datadict.items(), key=lambda t:t[0])))
#OrderedDict([('a':'a'), ('b':'b'), ('c':'c')])
z = collections.OrderedDict(sorted(datadict.items(), key=lambda t:t[0]))
print (dict(z))
#{'a':'a', 'b':'b', 'c':'c'}
print (z == datadict)
#True
使用此方法,可以按照所需的插入顺序将json_return
字典对象转换为OrderedDict
,然后返回该OrderedDict
对象或将其转换回dict
并返回该字典