この連載では、Pythonについて色々な形で再学習に取り組んでいます。前回の記事はこちらになります。 hirocom777.hatenadiary.org 前回は、辞書について学びました。辞書はリスト、タプルとは少し違った特徴がありますね。
今回も、辞書について学んでいきたいと思います。
辞書の内包表記
辞書はfor文を使って作ることができます。以下は辞書の作成例です。
d_1 = {} l_1 = ['A','B','C','D'] for key in l_1: d_1[key] = l_1.index(key) + 1 print(d_1) # {'A': 1, 'B': 2, 'C': 3, 'D': 4}を返す
辞書も内包表記があります。以下の様に記述されます。
{キーの算出式: 値の算出式 for ループ変数 in イテラブルなオブジェクト}
辞書内包表記を使うと、上記のif文の例は以下のようになります。
l_1 = ['A','B','C','D'] d_1 = {key:l_1.index(key) + 1 for key in l_1} print(d_1) # {'A': 1, 'B': 2, 'C': 3, 'D': 4}を返す
少しシンプルになりました。
辞書の型変換
辞書型のデータをリストやタプル、集合に変換すると、どうなるのでしょうか。変換してみましょう。
d_1 = {'A':1,'B':2,'C':3} print(list(d_1)) # ['A', 'B', 'C']を返す print(tuple(d_1)) # ('A', 'B', 'C')を返す print(set(d_1)) # {'B', 'C', 'A'}を返す(順番は保証されない)
それぞれキーだけのオブジェクトに変換されました。keysメソッドを使用して「d_1.keys()」としても同じ結果が出ます。
値を取得したい場合はvlauesメソッドを使って「d_1.values()」とします。
d_1 = {'A':1,'B':2,'C':3} print(list(d_1.values())) # [1, 2, 3]を返す print(tuple(d_1.values())) # (1, 2, 3)を返す print(set(d_1.values())) # {1, 2, 3}を返す(順番は保証されない)
それでは前回ご紹介したitemsメソッドを使用するとどうなるでしょうか。結果は以下のようになりました。
d_1 = {'A':1,'B':2,'C':3} print(list(d_1.items())) # [('A', 1), ('B', 2), ('C', 3)]を返す print(tuple(d_1.items())) # (('A', 1), ('B', 2), ('C', 3))を返す print(set(d_1.items())) # {('C', 3), ('B', 2), ('A', 1)}を返す(順番は保証されない)
それぞれの要素が、キーと値のタプルとなって変換されました。
辞書への型変換
辞書はキーと値を要素に持つので、数値や文字といった要素しか持たないリストなどから変換することはできません。上の結果から考えると、タプルでキーと値を渡せば変換できそうです。変換にはdict関数を使います。
# 以下はすべて{'A': 1, 'B': 2, 'C': 3}を返す print(dict([('A', 1), ('B', 2), ('C', 3)])) print(dict((('A', 1), ('B', 2), ('C', 3))))
以上のように変換できました。キーと値の受け渡しは、タプルをリスト、集合でも変換可能です。ただし集合の場合キーと値が入れ替わる可能性があります。
集合の場合はどうでしょうか。
# {'A': 1, 'B': 2, 'C': 3}を返す(順番は保証されない) print(dict({('A', 1), ('B', 2), ('C', 3)}))
やはり変換できましたが、順番が保証されません。型変換に集合の使用は避けたほうが良いようです。
辞書の連結
算術演算子「+」を使った辞書どうしの連結はできません。エラーになってしまいます。 辞書同士の連結は、演算子「|」を使用します(Python3.9以降)。
d_1 = {'A': 1, 'B': 2} d_2 = {'C': 3, 'D': 4} # print(d_1 + d_2) # エラーになる print(d_1 | d_2) # {'A': 1, 'B': 2, 'C': 3, 'D': 4}を返す
重複するキーがある場合は、右側の値で上書きされてしまいます。この方法は、2つの辞書を併せて新しい辞書を作ります。前回ご紹介したupdateメソッドは、辞書に要素を追加する方法です。違いに注意しましょう。
次回は関数
いかがでしょうか。辞書に関する理解が深まったかなと思います。今まで文字列、リスト、タプル、集合、辞書と反復可能オブジェクトについて見てきました。次回は、それらをまとめてみようと思います。ほかのデータ型についてもまとめてみましょう。お楽しみに!!