今晚看到了这个问题。在此之前我从未听说过future_builtins,这让我感到疑惑。future_builtins仅涵盖几种类型,并且dict不是其中之一。有没有办法使用在 Python 2.7中使用视图的Python 3dict行为?这在尝试编写 Python 3 兼容代码时特别有用。在 Python 2 中,这些方法具有创建s 的开销,并且迭代器版本在 Python 3 中消失了。但使用它们是编写 Python 3 兼容代码的建议。itemskeysvalueslist
1632 次
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
- dict 方法
dict.keys(),dict.items()并dict.values()返回“视图”而不是列表。例如,这不再有效k = d.keys():k.sort(). 改为使用k = sorted(d)(这也适用于 Python 2.5,并且同样有效)。- 此外,不再支持
dict.iterkeys(),dict.iteritems()和方法。dict.itervalues()
与 Guido 交谈后,摆脱了未来的导入魔法,转而只提供
viewkeys,viewitems和viewvaluesdicts 的方法。这使得高效的 2.6 和 3.0dict使用代码可能通过2to3将view-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 回答