为什么pprint模块对dict键的排序与打印不同?

时间:2011-07-31 09:51:09

标签: python

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的文档提到了这一点,但没有说明原因。为什么会出现这种差异?

2 个答案:

答案 0 :(得分:6)

pprint代表“漂亮的印刷品”,也暗示“令人愉悦,人类容易阅读”。对dict键进行排序只是遵循该目标,pprint不应该主要是快速的(排序键增加了惩罚),但是,错误,漂亮。 :)

另一方面,

print“只是打印”,尽可能快。实际上,此处的差异在dict的{​​{1}}和__str__特制的字符串转换之间。

答案 1 :(得分:0)

pprint可能必须实现与普通print不同的内容,因为它被告知漂亮。好吧,输出仍然不是很好,但至少排序了。

使用print打印字典很可能与其内部实现(树?哈希表?)相关联。请注意,字典要求元素可以清除,所以这就是我要寻找一些排序规则的地方。在我的例子中,如果我用正整数填充字典,我的输出将被排序(hash(int)==int)。无论规则是什么,print语句只是以最方便,最快捷的方式传递字典,并且不能假设任何特定的顺序。