我今晚看到了this question。在此之前我从未听说过future_builtins
,这让我感到疑惑。 future_builtins
仅涵盖几种类型,dict
不是其中之一。有没有办法使用在Python 2.7中使用dict
,items
和keys
视图的Python 3 values
行为?在尝试编写兼容Python 3的代码时,这将特别有用。在Python 2中,这些方法具有创建list
的开销,并且迭代器版本在Python 3中消失。但是使用它们是编写Python 3兼容代码的建议。
答案 0 :(得分: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
和viewvalues
方法 http://stardict.sourceforge.net/Dictionaries.php下载。这使得有效的2.6和3.0dict
- 可能使用代码 制作2to3
将view
- 方法直接翻译为keys
/values
/items
在 3.0,而不是将所有内容包装在list()
。
2to3
工具:
RefactoringTool: Refactored so.py
--- so.py (original)
+++ so.py (refactored)
@@ -1 +1 @@
-print dic.viewkeys()
+print(dic.keys())