Pythonのdict.items()とdict.iteritems()の違いとは?わかりやすく解説
Pythonで辞書(dict)を扱う際、items()とiteritems()という2つのメソッドに出会うことがあります。この記事では、両者の違いとPythonのバージョンによる扱いの変化について詳しく解説します。
Python 2.xにおけるitems()とiteritems()の違い
Python 2.xでは、どちらのメソッドも利用可能ですが、その動作は大きく異なります。
items()メソッド
items()は、辞書オブジェクトから「キーと値のペア」を要素とするタプルのリストを返します。つまり、呼び出した時点ですべての要素をリストとしてメモリ上に展開します。
iteritems()メソッド
一方、iteritems()はイテレータ(ジェネレータ)を返します。すべての要素を一度にメモリに読み込むのではなく、必要に応じて1つずつ要素を取り出すため、大きな辞書を扱う場合にメモリ効率が良いという特徴があります。
実際のコード例を見てみましょう。
>>> d = {'1': 1, '2': 2, '3': 3}
>>> d.items()
[('1', 1), ('2', 2), ('3', 3)]
>>> for i in d.iteritems():
... print i
('1', 1)
('2', 2)
('3', 3)
d.items()はリスト全体を返しているのに対し、d.iteritems()はforループの中で1つずつ値を取り出しています。
Python 3.xではiteritems()が廃止
Python 3.xでは、iteritems()は廃止(削除)されました。代わりに、items()がPython 2のiteritems()と同様の動作をするようになっています。
具体的には、Python 3のitems()はリストではなくビューオブジェクト(dict_items)を返します。ビューオブジェクトはイテレータのように振る舞い、辞書の内容が変更されるとそれが反映される動的な性質を持ちます。
>>> d = {'1': 1, '2': 2, '3': 3}
>>> d.items()
dict_items([('1', 1), ('2', 2), ('3', 3)])
>>> for i in d.items():
... print(i)
('1', 1)
('2', 2)
('3', 3)
まとめ:バージョンごとの対応表
| バージョン | items() | iteritems() |
|---|---|---|
| Python 2.x | キーと値のペアのリストを返す | イテレータを返す(メモリ効率が良い) |
| Python 3.x | ビューオブジェクトを返す(iteritems()相当の動作) | 廃止・使用不可 |
Python 2とPython 3の両方に対応したコードを書きたい場合は、sixライブラリのiteritems()を使うか、単純にitems()を使用するのが一般的です。現在Python 3が標準となっているため、新しくコードを書く際はitems()を使えば問題ありません。
-
【Python】Tkinterのroot.destroy()とroot.quit()の違いを徹底解説
PythonのGUIライブラリ「Tkinter」では、アプリケーションを終了する方法として destroy() と quit() の2つのメソッドがよく使われます。似たような役割に見えますが、実際には動作が異なります。この記事では、それぞれの違いをサンプルコード付きでわかりやすく解説します。 root.destroy()とは tkinterのウィンドウオブジェクトに対して destroy() メソッドを呼び出すと、mainloop の処理が終了し、ウィンドウ内のすべてのウィジェットが破棄されます。つまり、ウィンドウそのものが完全に閉じられ、バックグラウンドで動作しているインタプリタ(Tcl/T
-
Pythonのtkinterとtkinter.ttkウィジェットの違いとは?スタイリング方法を解説
tkinter.ttkは、tkinterウィジェットのスタイル(見た目)を設定するためのモジュールです。HTML要素にCSSでデザインを適用するように、tkinter.ttkを使うことでtkinterウィジェットの外観を自由にカスタマイズできます。 tkinterウィジェットとtkinter.ttkの主な違い tkinterウィジェットは、ボタン・ラベル・テキスト・スクロールバーなど、基本的なGUI部品を追加するために使用します。一方、tkinter.ttkは標準のtkinterよりも多くの種類のウィジェットをサポートしています。 tkinter.ttkではPlaceやPack()、Grid