pprint
按字母顺序对dicts键进行排序,print
按默认顺序对它们进行排序。
from pprint import pprint
d = {'foo': 1, 'bar': 2, 'baz': 3}
pprint(d)
# {'bar': 2, 'baz': 3, 'foo': 1}
print d
# {'baz': 3, 'foo': 1, 'bar': 2}
pprint
的文档提到了这一点,但没有说明原因。为什么会出现这种差异?
答案 0 :(得分:6)
pprint
代表“漂亮的印刷品”,也暗示“令人愉悦,人类容易阅读”。对dict
键进行排序只是遵循该目标,pprint
不应该主要是快速的(排序键增加了惩罚),但是,错误,漂亮。 :)
print
“只是打印”,尽可能快。实际上,此处的差异在dict
的{{1}}和__str__
特制的字符串转换之间。
答案 1 :(得分:0)
pprint
可能必须实现与普通print
不同的内容,因为它被告知漂亮。好吧,输出仍然不是很好,但至少排序了。
使用print
打印字典很可能与其内部实现(树?哈希表?)相关联。请注意,字典要求元素可以清除,所以这就是我要寻找一些排序规则的地方。在我的例子中,如果我用正整数填充字典,我的输出将被排序(hash(int)==int
)。无论规则是什么,print
语句只是以最方便,最快捷的方式传递字典,并且不能假设任何特定的顺序。