在Python中使用pprint.pprint之后,是否可以避免排序字典输出?

Mar*_*iou 5 python dictionary pretty-print pprint

代码是:

from pprint import pprint
d = {"b" : "Maria", "c" : "Helen", "a" : "George"}
pprint(d, width = 1)
Run Code Online (Sandbox Code Playgroud)

输出为:

{'a': 'George',
'b': 'Maria',
'c': 'Helen'}
Run Code Online (Sandbox Code Playgroud)

但是,所需的输出是:

{'b': 'Maria',
'c': 'Helen',
'a': 'George'}
Run Code Online (Sandbox Code Playgroud)

可以使用pprint完成此操作,还是有其他方法?

Oli*_*çon 11

Python 3.8 或更新版本:

您可以使用sort_dicts=False来防止它按字母顺序对它们进行排序:

pprint.pprint(data, sort_dicts=False)
Run Code Online (Sandbox Code Playgroud)

Python 3.7 或更早版本:

从 Python 3.7(或在 cPython 的情况下为 3.6),dict保留插入顺序。对于之前的任何版本,您都需要使用 anOrderedDict来保持密钥有序。

虽然,从文档开始pprint

字典在计算显示之前按关键字排序。

这意味着pprint无论如何都会破坏您想要的订单。

替代方法:

您还可以使用json.dumps漂亮的打印数据。

代码:

import json
from collections import OrderedDict

# For Python 3.6 and prior, use an OrderedDict
d = OrderedDict(b="Maria", c="Helen", a="George")

print(json.dumps(d, indent=1))
Run Code Online (Sandbox Code Playgroud)

输出:

{
 "b": "Maria",
 "c": "Helen",
 "a": "George"
}
Run Code Online (Sandbox Code Playgroud)