元セブ島在住のエンジニアの僕「Tommy」が、プログラミング・英語・セブ事情を発信するブログ

Tommy's blog

【Python】「辞書」と「順序付き辞書」の違い【→プログラム初心者向け】

11月 25, 2019

プログラム女子
Pythonの「辞書」って、値を入れた順番で取り出せないの?
辞書には、「普通の辞書」と「順序付き辞書」の2種類があるよ。キーを使わない値の取り出しには、この「順序付き辞書」を使う必要があるね。今回は辞書の使い方について説明するね。
Tommy

この記事で分かること

  • Pythonプログラムにおける辞書型とは何かが分かる
  • 「通常の辞書」と「順序付き辞書」の違いが分かる

Pythonの「辞書」と「順序付き辞書」の違い概要

この記事では、Pythonの「辞書」という型の使い方について説明します。「辞書」の形式は、文字通り、「見出し語」とその「定義説明」から構成される型です。「見出し語」と「定義説明」は1対1に対応しており、この「見出し語」のことを「key」(キーと呼ぶ)といい、「定義説明」の方は「value」(バリューと呼ぶ)という言い方をします。辞書には「通常の辞書」と「順序付き辞書」の2種類があり、それらは、それぞれ辞書の要素に「どのような順番で値が入っているか」に重要な特徴があるので、その特徴を説明します。

Pythonの「辞書」と「順序付き辞書」の違いを知る前提環境

Pythonでの辞書型変数の順番の説明の前提環境は、下の記事で説明している私の環境と同じ環境で確認しています。

レンタルサーバなどのlinuxサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。

もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。

Pythonの「辞書」と「順序付き辞書」の違いを表すサンプルプログラム

このサンプルプログラムでは、辞書型に格納されている「キー」と「バリュー」がどのような順番で入っているかを確認します。一度辞書に入れる処理を行い、その後Print文でどのような順番で入っているかを見ていくサンプルコードを書いてみます。「キー」とは、値が入っている箱の名前のことで、「バリュー」とは、値のことです。

通常の辞書を使ったサンプルプログラムの作成

ここでは通常の辞書を使ったサンプルプログラムを作成し、そのサンプルプログラムの実行結果を示します。通常の辞書のサンプルプログラム作成から実行結果を確認するまでの手順は次のような順番で説明します。

  1. 通常の辞書のサンプルプログラム
  2. 通常の辞書のサンプルプログラム実行結果

1.通常の辞書のサンプルプログラム

リスト変数「key_list」に文字列「key1」から文字列「key3」までの順番に入っているキーに対して、辞書型変数「dict」にバリュー「1」から「3」を順番に入れていき、その結果をPrint文で確認します。

if __name__ == '__main__':

	key_list = ['key1','key2','key3']
	print(key_list)

	dict = {}
	i = 1
	for k in key_list:
		dict[k] = i
		i += 1
	print(dict)

  1. 変数「key_list」を文字列「key1」「key2」「key3」という3つの値で初期化する。
  2. 変数「key_list」の内容を表示する。
  3. 変数「dict」を空の辞書で初期化する。
  4. 変数「i」を整数1で初期化する。
  5. 変数「key_list」を1つずつ変数「k」に格納し、for文の内容を繰り返す。
  6. 変数「dict」の変数「k」のキーの値に変数「i」を格納する。
  7. 変数「i」を1つインクリメントする。
  8. 変数「dict」の内容を表示する。

2.通常の辞書のサンプルプログラム実行結果

この結果では、「Key1」から順番に格納しているのに、「Key3」が初めに取り出されていて、順番が保証されていないことが分かります。

$ python test.py
['key1', 'key2', 'key3']
{'key3': 3, 'key2': 2, 'key1': 1}

順序付き辞書のサンプルプログラムの作成

次に、順序付き辞書のサンプルプログラムを作成して、そのサンプルプログラムの実行結果を確認することで、順序付き辞書の仕組みを理解します。サンプルプログラム作成から実行までは次のような順番で説明します。

  1. ライブラリのインポート
  2. 順序付き辞書のサンプルプログラム
  3. 順序付き辞書サンプルプログラム実行結果

ライブラリのインポート

ここでは 順序付き辞書を扱うために、「collections」というライブラリをインポートします。

import collections

「collections」ライブラリをインポートする。

順序付き辞書のサンプルプログラム

リスト変数「key_list」にkey1からkey3までの順番に入っているキーに対して、順序付き辞書「o_dict」にバリュー「1」から「3」を順番に入れていき、その結果をPrint文で確認します。

if __name__ == '__main__':

	key_list = ['key1','key2','key3']
	print(key_list)

	o_dict = collections.OrderedDict()
	i = 1
	for k in key_list:
		o_dict[k] = i
		i += 1
	print(o_dict)

  1. 変数「key_list」を文字列「key1」「key2」「key3」という3つの値で初期化する。
  2. 変数「key_list」の内容を表示する。
  3. 変数「o_dict」を「collections.OrderedDict」関数を使って順序付き辞書で初期化する。
  4. 変数「i」を整数1で初期化する。
  5. 変数「key_list」を1つずつ変数「k」に格納し、for文の内容を繰り返す。
  6. 変数「o_dict」の変数「k」のキーの値に変数「i」を格納する。
  7. 変数「i」を1つインクリメントする。
  8. 変数「o_dict」の内容を表示する。

順序付き辞書サンプルプログラム実行結果

この順序付き辞書を用いた結果では、「key1」から順番に格納したので、「key1」から順番に取り出されていて、順番が保証されていることが分かります。

$ python test.py
['key1', 'key2', 'key3']
OrderedDict([('key1', 1), ('key2', 2), ('key3', 3)])