首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Json输出排序/订单问题

Json输出排序/订单问题
EN

Stack Overflow用户
提问于 2019-07-26 14:36:17
回答 1查看 150关注 0票数 0

我有一个由SQL查询排序结果构建的字典,在jsonify()这个结果用于输出之前,它显示了在控制台打印时(按我想要的顺序,按num键排序):

{“贸易”:{“num”:0,“交易”:1,“类型”:“输入长”,“信号”:“长”,“日期”:“2017-01-31”,“价格”:928.5,“合同”:109.1395},{“num”:1,“贸易”:1,“类型”:“退出长”,“信号”:“短”,“日期”:“2017-03-10”,“价格”:1005.0,“合同”:109.1395},{“num”:2,“交易”:2,“类型”:“条目短”,“信号”:“短期”,“日期”:“2017-03-10”,“价格”:1005.0,“合同”:84.0427},{“num”:3,“交易”:2,“类型”:“退出空”,“信号”:“关闭入口指令空头”,“日期”:“2017-03-19”,“价格”:970.0,“合约”:84.0427}

之后,除了返回jsonify(结果)之外,我什么也不做,但是当我在REST上运行查询时,输出如下所示:

{“贸易名录”:{“合同”:109.1395,“日期”:“2017-01-31”,"num":0,“价格”:928.5,“信号”:“长”,“贸易”:1,“类型”:“进入长”},{“合同”:109.1395,“日期”:“2017-03-10”,"num":1,“价格”:1005.0,“信号”:“空”,“交易”:1,“类型”:“退出长”},{“合同”:84.0427,“日期”:“2017-03-10”,"num":2,“价格”:1005.0,“信号”:“空”,“交易”:2,“类型”:“输入空头”},{“合同”:84.0427,“日期”:“2017-03-19”,“价格”:3,“价格”:970.0,“信号”:“关闭入口指令空头”,“交易”:2,“类型”:“退出空”}}

因此,似乎Jsonify出于某种原因扰乱了顺序,并对键进行了字母排序,对于我如何防止这种情况发生,有什么建议吗?

代码语言:javascript
复制
sql = "SELECT num, trade, type, signal, date, price, contracts from tradelist ORDER BY num"
query = conn.execute(sql)
result = {'tradelist': [dict(zip(tuple (query.keys()), row)) for row in query.cursor]}
print(result)
return jsonify(result)
EN

回答 1

Stack Overflow用户

发布于 2019-07-26 15:09:54

如果您注意到,在您的输出中,键是按字母顺序排列的。可能有两个原因。(1) python词典不能保证具有相同的顺序(按添加的顺序)。如果希望保留顺序,则可能需要使用OrderedDict。(2) query.keys()的元组已经以其内部有序的方式进入python,这就是输出存在的原因。

假设这里的条件1为真,我已经将您的代码做了很小的修改,如下所示。

代码语言:javascript
复制
from collections import OrderedDict
sql = "SELECT num, trade, type, signal, date, price, contracts from tradelist ORDER BY num"
query = conn.execute(sql)
result = {'tradelist': [OrderedDict(zip(tuple (query.keys()), row)) for row in query.cursor]}
print(result)
return jsonify(result)

如果这对你有用的话,请告诉我。我很好奇,在这种情况下,条件1是对的还是条件2。谢谢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57222228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档