-1

今晚看到了这个问题。在此之前我从未听说过future_builtins,这让我感到疑惑。future_builtins仅涵盖几种类型,并且dict不是其中之一。有没有办法使用在 Python 2.7中使用视图的Python 3dict行为?这在尝试编写 Python 3 兼容代码时特别有用。在 Python 2 中,这些方法具有创建s 的开销,并且迭代器版本在 Python 3 中消失了。但使用它们是编写 Python 3 兼容代码的建议。itemskeysvalueslist

4

1 回答 1

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

Python 3.0 的新特性

  • dict 方法dict.keys()dict.items()dict.values()返回“视图”而不是列表。例如,这不再有效k = d.keys()k.sort(). 改为使用k = sorted(d)(这也适用于 Python 2.5,并且同样有效)。
  • 此外,不再支持dict.iterkeys(),dict.iteritems()和方法。dict.itervalues()

错误:将 dictviews 向后移植到 2.7

与 Guido 交谈后,摆脱了未来的导入魔法,转而只提供viewkeys,viewitemsviewvaluesdicts 的方法。这使得高效的 2.6 和 3.0dict使用代码可能通过2to3view-methods 直接转换为 3.0 中的keys/ values/ items ,而不是将所有内容包装在list().

2to3工具:

RefactoringTool: Refactored so.py
--- so.py   (original)
+++ so.py   (refactored)
@@ -1 +1 @@
-print dic.viewkeys()
+print(dic.keys())
于 2013-05-17T04:12:03.683 回答