pprint
按字母順序排序鍵排序,print
按默認順序排序。爲什麼pprint模塊對打印的字母鍵進行排序?
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
說明文檔中提到這一點,但並沒有說爲什麼。爲何差異?
pprint
按字母順序排序鍵排序,print
按默認順序排序。爲什麼pprint模塊對打印的字母鍵進行排序?
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
說明文檔中提到這一點,但並沒有說爲什麼。爲何差異?
pprint
代表「漂亮印花」,也意味着「悅目人眼,易於人類閱讀」。對dict
鍵進行排序的目的是,pprint
不應該主要是快速的(排序鍵會增加罰款),但是,errr,漂亮。 :)
print
另一方面「只是打印」,儘可能快。實際上,這裏的差異在dict
的__str__
和pprint
的特製字符串轉換之間。
那麼,「僅僅因爲它的方式」,那麼呢? –
不,因爲它是按照這種方式編寫的,其目的在於記住。印刷是例如用於調試和對鍵進行排序,使您可以更輕鬆地找到所需的信息。 – pyroscope
pprint
不得不實施與普通print
不同的東西,因爲它被告知是漂亮的。那麼,輸出仍然不是很好,但至少排序。
使用print
打印字典最有可能與其內部實現(樹?散列表?)連接。請注意,詞典要求元素是可散列的,所以這就是我要查找某些排序規則的地方。在我的情況下,如果我用正整數填充字典,我的輸出被排序(hash(int)==int
)。無論規則如何,print
聲明只是以最方便快捷的方式傳遞字典,並且不能假設任何特定順序。
說'打印按默認順序排序它們是不正確的。總的來說,print *不會*排序它們,而'pprint'明確地排序它們。 'print'僅使用dict的迭代器行爲返回鍵的順序,這是一個未定義的順序,可能因實現和機器而異。 –