在flask上返回一个排序的字典



我已经根据值对字典进行了排序,当我打印它时,它已经排序了。然而,当我在烧瓶模块上返回它时,它按字母顺序打印。如何让它按值排序返回呢?

或者我可以问一下,为什么会这样?

API请求的响应看起来像这样

{
"bch_krw": {
"timestamp": 1559285555322,
"last": "513000",
"open": "523900",
"bid": "512100",
"ask": "513350",
"low": "476200",
"high": "540900",
"volume": "4477.20611753",
"change": "-10900",
"changePercent": "-2.08"
},
"fet_krw": {
"timestamp": 1559285607258,
...
},
...
}

p。如果有人想知道,我已经注意到api的体积出了问题。而且,它的格式是韩元

@ app.route('/volume')
def print_volume():
url = "https://api.korbit.co.kr/v1/ticker/detailed/all"
resp = requests.get(url)
obj = resp.json()
# print(obj)
total_vol = 0.0
for i in obj:
total_vol += float(obj[i]['volume'])
#obj = sorted(obj.items(), key=lambda x: x[1]['volume'], reverse=True)
print(obj)
dict_vol = {}
for i in obj:
dict_vol[i[0]] = i[1]['volume']
sorted_top_five = dict(
sorted(dict_vol.items(), key=lambda item: item[1], reverse=True))
print(sorted_top_five)

return sorted_top_five

按字母顺序获取字典的原因是因为从python字典类型到JSON类型的序列化在幕后发生,默认行为是按字母顺序对字典键进行排序。

所以要序列化你的字典,你需要json模块。参见下面的代码片段

from flask import Flask
import requests
import json
app = Flask(__name__)
@app.route('/volume')
def print_volume():
url = "https://api.korbit.co.kr/v1/ticker/detailed/all"
resp = requests.get(url)

obj = resp.json()
total_vol = 0.0
for i in obj:
total_vol += float(obj[i]['volume'])
dict_vol = {}
for key in obj:
dict_vol[key] = obj[key]['volume']
sorted_top_five = dict(
sorted(dict_vol.items(), key=lambda item: item[1], reverse=True))
return json.dumps(sorted_top_five)
if __name__ == "__main__":
app.run()

在你的flask应用程序开始时调整设置:

app = Flask(__name__)
app.config['JSON_SORT_KEYS'] = False

感谢@Saeed Ir

相关内容