2013-05-17 62 views
-1

今晚我看到了this question。在此之前我從來沒有聽說過future_builtins,這讓我感到疑惑。 future_builtins只涵蓋幾種類型,並且dict不是其中之一。有沒有辦法在Python 2.7中使用使用視圖itemskeysvalues的Python 3 dict行爲?這在嘗試編寫Python 3兼容代碼時特別有用。在Python 2中,這些方法具有創建list的開銷,並且迭代器版本在Python 3中消失。但是,使用它們是編寫Python 3兼容代碼的建議。Python 3在Python 2中的字典行爲

+1

類似的事情,但她們更喜歡將'viewkeys()'的'以上來自進口__future__ ..',HTTP方法'dict'://bugs.python .org/issue1967 –

回答

3

您可以在py2x中使用viewkeys(),viewitems()viewvalues()

>>> dict.viewkeys? 
Type:  method_descriptor 
String Form:<method 'viewkeys' of 'dict' objects> 
Namespace: Python builtin 
Docstring: D.viewkeys() -> a set-like object providing a view on D's keys 

What’s New In Python 3.0

  • 字典方法dict.keys()dict.items()dict.values()回報,而不是列出「意見」。例如,這不再起作用:k = d.keys(); k.sort()。改用k = sorted(d)(這也適用於Python 2.5,效率也一樣)。
  • 此外,不再支持dict.iterkeys(),dict.iteritems()dict.itervalues()方法。

錯誤:Backport dictviews to 2.7

交談圭多後,得到的只是提供 類型的字典viewkeysviewitemsviewvalues方法有利於 擺脫今後進口的魔力。這使得高效的2.6和3.0 dict - 使用代碼可能由 使2to3在 3.0 view - 方法轉換直接keys/values/items ,並在list()沒有包裝的一切。

2to3工具:提出

RefactoringTool: Refactored so.py 
--- so.py (original) 
+++ so.py (refactored) 
@@ -1 +1 @@ 
-print dic.viewkeys() 
+print(dic.keys()) 
+0

不幸的是,它看起來像Python 3也會消失。遊民。 (對不起,在你回答時偷偷摸摸的編輯。) – jpmc26

+0

@ jpmc26是的,這些被py3x中的'keys()','values()'所取代。 –

+1

@ jpmc26你可以使用'2to3'工具,在py2x中編寫代碼並獲得它的等效py3x版本。 –