1. ホーム
  2. パイソン

[解決済み】Python2のdict.items()とdict.iteritems()の違いは何ですか?

2022-03-23 06:33:07

質問

との間に、何か違いがありますか? dict.items() dict.iteritems() ?

から Pythonドキュメント :

dict.items() : を返します。 コピー 辞書の (キー, 値) のペアのリストの。

dict.iteritems() : を返します。 イテレータ を辞書の(key, value)のペアの上に置く。

以下のコードを実行すると、それぞれ同じオブジェクトへの参照が返されるようです。私が見逃している微妙な違いがあるのでしょうか?

#!/usr/bin/python

d={1:'one',2:'two',3:'three'}
print 'd.items():'
for k,v in d.items():
   if d[k] is v: print '\tthey are the same object' 
   else: print '\tthey are different'

print 'd.iteritems():'   
for k,v in d.iteritems():
   if d[k] is v: print '\tthey are the same object' 
   else: print '\tthey are different'   

出力します。

d.items():
    they are the same object
    they are the same object
    they are the same object
d.iteritems():
    they are the same object
    they are the same object
    they are the same object

解決方法は?

それは進化の一部です。

元々、Pythonは items() はタプルの実際のリストを構築し、それを返しました。これは潜在的に多くの余分なメモリを必要とする可能性があります。

その後、言語全般にジェネレータが導入され、このメソッドは、イテレータジェネレータメソッドとして iteritems() . 後方互換性のためにオリジナルが残っています。

Python 3 の変更点のひとつは items() はビューを返すようになり list が完全に構築されることはありません。そのため iteritems() メソッドもなくなりました。 items() は、Python 3 では次のように動作します。 viewitems() をPython 2.7で使用した場合。