2016/06/20更新

[Python] 辞書(dictionary)に入門する

このエントリーをはてなブックマークに追加            

こんにちは、@yoheiMuneです。
最近はPythonの各機能の入門ばかりブログを書いている気がしますが、基礎に再入門中なのです。本日はPythonの辞書(dictionary)の入門をブログに書きたいと思います。
画像

目次




辞書(dictionary)のデータ型とは

辞書データ型は、キーと値をペアに持つことができるデータ型です。他の言語では、MapやTable型などという場合もあります。具体的には、以下のようにキーと値を保持することができます。
# 例:ユーザー名(=キー)と年齢(=値)を保持する
user_dict = {
    "Yohei": 30,
    "Mike": 28,
    "John": 35
}
このブログでは、辞書の生成や変更、値へのアクセスなどを取り上げたいと思います。



辞書の生成

辞書の生成方法は色々とあり、具体的には以下のように生成することができます。
# 空の辞書を作成する
empty_dict = {}
print(empty_dict) # {}

# 初期値を指定して、辞書を生成する
user = {
    "name": "Yohei",
    "age": 30
}
print(user)
# {'age': 30, 'name': 'Yohei'}

# tupleからdictへの変換
# tupleの各項目で、値を2つ持っていればdictへ変換できる
lol = dict([["a","b"], ["c","d"], ["e","f"]])
print(lol)
# {'a': 'b', 'e': 'f', 'c': 'd'}

# listからdictへの変換
# 同じく、各要素が値を2つ持っていればOK
data = dict([[1,2], [3,4], [5,6]])
print(data)
# {1: 2, 3: 4, 5: 6}

# リストやタプルの中身は、文字(2文字)でもdictに変換できる
data = dict(["ab", "cd", "ef"])
print(data)
# {'a': 'b', 'e': 'f', 'c': 'd'}

# 2文字のタプル
data = dict(("ab", "cd", "ef"))
print(data)
# {'a': 'b', 'e': 'f', 'c': 'd'}
このように辞書の生成は、波カッコ({})やdictを用いて行うことができます。



キーによる値の変更/追加

辞書はキーを用いて、値の変更や追加などを行うことができます。この辺は基本事項ですね!
# 辞書データを生成
user = {
    "name": "Yohei",
    "age": 30
}

# nameキーを用いて、値を変更する
user["name"] = "John"
print(user)
# {'age': 30, 'name': 'John'}

# phoneキーを用いて、値を追加する
user["phone"] = "000-0000-0000"
print(user)
# {'phone': '000-0000-0000', 'age': 30, 'name': 'John'}



updateによる辞書の結合

updateメソッドを使うことで、2つの辞書を1つにまとめることができます。
# 辞書の生成
dict_1 = {"a": 1, "b": 2}
dict_2 = {"b": 10, "c": 20}

# dict_1に、dict_2の内容を追加する
# 同じキーがあれば、dict_2の値が優先される
dict_1.update(dict_2)

print(dict_1)
# {'b': 10, 'a': 1, 'c': 20}

# dict_2の値は変わらない
print(dict_2)
# {'b': 10, 'c': 20}



delによる指定したキーの値を削除

delete関数を使うことで、指定したキーと値を削除することができます。
# 辞書の生成
user = {"name": "Yohei", "age": 30}

# age項目を削除
del user["age"]

print(user)
# {'name': 'Yohei'}



全ての要素を削除する

全ての値を削除するには、以下2通りがあります(が、後者の方が楽だしよく使われます)。
# clearメソッドで全部削除
user = {"name": "Yohei", "age": 30}
user.clear()
user
{}

# 空辞書を変数に代入して、前の値への参照を外す
user = {"name": "Yohei", "age": 30}
user = {}
user
{}



値の取得([key]とget())

辞書から値を取得するには、キーに直接アクセスするか、get関数を使ってアクセスする方法があります。
# キーを指定して値を取り出す
user = {"name": "Yohei", "age": 30}
print(user["name"]) # 'Yohei'

# 存在しないキーを指定すると、エラーになってしまう
user["email"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'email'

# get関数を使っても、値を取得することできる
print(user.get("name")) # 'Yohei'

# get関数の場合、キーが存在しない場合にも返却する値を指定することができます
print(user.get("email", "unknown"))
# 'unknown'



keysによる全てのキーを取得

keys関数を使うことで、辞書内のキーをすべて取得することができます。
users = {
    "Yohei": 30,
    "John": 21,
    "Junji": 35
}
print(users.keys())
# dict_keys(['Junji', 'John', 'Yohei'])

print(list(users.keys()))
# ['Junji', 'John', 'Yohei']



values()による全ての値の取得

values関数を使うことで、辞書内の値をすべて取得することができます。
users = {
    "Yohei": 30,
    "John": 21,
    "Junji": 35
}
print(users.values())
# dict_values([35, 21, 30])

print(list(users.values()))
# [35, 21, 30]



itemsによる全てのキー/値ペアを取得する

items関数を使うことで、キー/値のペアをすべて取得することができます。
users = {
    "Yohei": 30,
    "John": 21,
    "Junji": 35
}

print(users.items())
# dict_items([('Junji', 35), ('John', 21), ('Yohei', 30)])

print(list(users.items()))
# [('Junji', 35), ('John', 21), ('Yohei', 30)]

copyを使った参照切り離し

copy関数を使うことで、中身をコピーすることができます。
# copyではなく、普通に変数代入した場合には、
# 辞書の中身は共有されるので、片方の値を変えるともう一方の値も変わる
dict_1 = {"a": 1, "b": 2}
dict_2 = dict_1
dict_1["a"] = 10
print(dict_2) # {'b': 2, 'a': 10}

# copyを使うと、辞書の中身までコピーしてくれるので、
# 片方の辞書の変更が、もう一方へ影響を与えない
dict_1 = {"a": 1, "b": 2}
dict_2 = dict_1.copy()
dict_1["a"] = 10
print(dict_2) # {'b': 2, 'a': 1}



参考資料

Pythonの基礎勉強は、以下の書籍を熟読して猛威勉強中です。色々と掲載されていて非常に参考になります。

『入門 Python 3(O'Reilly)』



最後に

今日はPythonの辞書(dictionary)の入門記事でした。Pythonの辞書やリストといったデータ型は非常によく使うので、細かい点まで学んでおくとコーディングのスピードアップになっていいですよね!

最後になりますが本ブログでは、Python・Swift・Java・フロントエンド・機械学習など雑多に情報発信をしていきます。自分の第2の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSTwitterをフォローして頂けると幸いです ^ ^。

最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。