Python 3中的Python 3 dict行为

时间:2013-05-17 04:10:17

标签: python dictionary

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

1 个答案:

答案 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

What’s New In 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()方法。
  •   

错误:Backport dictviews to 2.7

  

与Guido交谈后,摆脱了未来的进口魔术   仅提供viewkeysviewitemsviewvalues方法   http://stardict.sourceforge.net/Dictionaries.php下载。这使得有效的2.6和3.0 dict - 可能使用代码   制作2to3view - 方法直接翻译为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())