【独学】Pythonのdict型をサヴォア邸の情報で理解しよう

当サイトのリンクには広告が含まれています。

Pythonのdict型の使い方が分からない人に向けて書いています。

今回はPyCharmを使ってPythonのデータ型であるdict型を解説します。

今回も建築の情報を使って解説したいと思います。これまでに説明した様々なデータ型のデータを管理したいときに便利なデータ型です。

この記事はノンプログラマーのための「建築で理解するPython入門」の基礎編6回目です。

この記事を書いた人

panna(パンナ)| 建築デジタルの専門家

大学院で建築学を専攻し、修了後は設計事務所へ入所。現在はBIMの仕事をしています。
建築デジタル歴は10年以上。Rhino+GrasshopperとPythonを学生時代から使い始め、2017年からAutodesk RevitでBIM推進開始。

この記事のコンテンツ

建築情報でざっくり分かるデータ型のはなし!その3

これまでに説明したデータ型は次のとおりです。

これまでに学んだ3つのデータ型
  • str型:文字列型。住所とかなら数字があっても文字列型になる。
  • int型:整数型。計算に使える。
  • bool型:正しいか間違っているかを示すtrueとfasleの2パターン。
  • list型:様々なデータ型のデータを入れることができる箱のようなもの。

このデータ型について詳しく知りたい方はこちらをどうぞ。

データ型の違うたくさんデータがあっても順番を付けて整理できるのでlist型は非常に便利です。

しかし、リストの中の順番を表すインデックスで管理するため、様々なデータ型を扱うには少々向いていない場合があります。

list型のデータしか知らないとデータの管理が難しい?

インデックスだけではデータがどんなものか分からない場合があります。

例えば次の例を見てみましょう。

# list型のデータの中身はインデックスだけを見てもわかりにくい。これくらいの長さのリストならまだ大丈夫?
list1 = ["サヴォア邸", "ル・コルビジェ", "フランス", 440]

これくらいの短いリストであればはじめから順に0, 1, 2, 3と数えられますね。なんとか大丈夫だと思います。

list型のデータの中にlist型のデータをいれる…!?

ここから新しい内容ですが、「list型のデータの中にlist型のデータを入れる」ことができます。

長さの違うリストを入れることもできますし、list型以外のデータを入れることもできます。

まずここでは、list型のデータの中にlist型のデータを入れてみましょう。

# list型のデータの中身はインデックスだけを見てもわかりにくい。
# ファンズワース邸の面積のvalueは145.2ですが、int型(整数)を使いたいので145にしています。
list1 = ["サヴォア邸", "ル・コルビジェ", "フランス", 440]
list2 = ["ファンズワース邸", "ミース・ヴァン・デル・ローエ", "アメリカ", 145]
list3 = ["落水荘", "フランク・ロイド・ライト", "日本", 495]

# 変数listsの中に、list型のデータを持つ変数list1,list2,list3を代入する。
lists = [list1, list2, list3]

# 変数listsを表示する
print(lists)

この変数listsはlist型のデータを持っています。

list型のデータは角かっこ[ ]で囲われていて、0から始まる順番がついているデータでした。

そして、変数listsに代入されているlist型のデータの1つ1つもlist型のデータ型というわけです。(ネスト構造や入れ子構造と呼びます)

PyCharmで実行してみましょう。

DataType3.pyを作成してコマンドプロンプトから起動すると、次のように出力されます。

ここでちょっとおかしいなとなります。落水荘のリスト内に”日本”というデータが入っていますね。データを間違えてしまいました。ではこのリスト内のデータの更新をしようと考えたときにパッとインデックスが思いつきますか?

panna

入れ子になってて分かりにくいですよね。

list型のデータのネストが深くなってくると、インデックスで管理するのは分かりにくい。

list型のいいところ

同じ種類のデータがたくさんある場合はlist型が非常に便利です。

例えば以下のようにたくさんの名前データを入れて、インデックスで名前を選びたい場合などは圧倒的に便利です。

list = ["Taro", "Ken", "Takuya",...,"Atushi"] # ...にもデータが入っていると仮定します
list[N] # Nにランダムなインデックスを入れると名前がかえってきます

同じ種類のデータが入っている場合は管理しやすいです。

ここでようやくdict型のデータが登場します。

dict型のデータの扱い方を知ろう

dict型のデータは次のような構造です。

dict型のデータは波かっこ{ }でキー:バリューをはさむ!

{ key01 : value01 , key02 : value02 , …… , keyN : valueN }

キーとバリューでコロン「:」をはさんで、それを波かっこ{}で囲みます。

また、複数のキーとバリューのセットがある場合は、カンマ「,」で区切ります。

dict型のデータを作成してみる

早速Pythonコードを書いてみます。

# サヴォア邸の情報を使ってdict型のデータを作成して変数villa_savoyeに代入してみる
villa_savoye = {"建築家":"ル・コルビジェ", "所在地":"フランス", "面積":440}

# 変数villa_savoyeのデータ型を確認して変数data_typeに代入する
data_type = type(villa_savoye)

# 変数data_typeを表示する
print(data_type)

DataType3-2.pyを作成してコードを実行してみましょう。

データ型を表示するtype関数を使って、変数villa_savoyeのデータ型を確認しましょう。

「dict」と表示されるでしょうか。

おめでとうございます!
dict型のデータを作成
して変数代入することができました。

そして、ここで更にワンステップ上がりましょう。

list型のデータで管理が難しかった”あのデータ”をdict型で表すとどうなる?

先ほどのlist型データをもう一度書きます。

# list型のデータの中身はインデックスだけを見てもわかりにくい。
list1 = ["サヴォア邸", "ル・コルビジェ", "フランス", 440]
list2 = ["ファンズワース邸", "ミース・ヴァン・デル・ローエ", "アメリカ", 145]
list3 = ["落水荘", "フランク・ロイド・ライト", "アメリカ", 495]

やはりlist型のデータの中身をインデックスだけで判断しようとするのは難しいですね。

panna

表にして確認してみましょう。

建築建築家所在地面積
サヴォア邸ル・コルビジェフランス440
ファンズワース邸ミース・ヴァン・デル・ローエアメリカ145
落水荘フランク・ロイド・ライトアメリカ495

だいぶ見やすくなりました。このままの形でデータ化できたらいいんですけどね…

お察しの通り、dict型ならば可能です!

下記のコードを見てください。

# 表形式のデータをdict型のkeyとvalueに置き換えてデータを作成し、変数に代入する。
# ファンズワース邸の面積のvalueは145.2ですが、int型(整数)を使いたいので145にしています。
villa_savoye = {"建築":"サヴォア邸", "建築家":"ル・コルビジェ", "所在地":"フランス", "面積":440}
farnsworth_house = {"建築":"ファンズワース邸", "建築家":"ミース・ヴァン・デル・ローエ", "所在地":"アメリカ", "面積":145}
fallingwater = {"建築":"落水荘", "建築家":"フランク・ロイド・ライト", "所在地":"アメリカ", "面積":495}

dict型のデータでは、変数の中にあるデータがどんなものなのか「キー」を使って整理することができます。

サヴォア邸の建築家を表すデータを取ってきましょう。

PyCharmでDataType3-3.pyというPythonファイルを作成して実行しましょう。

# 表形式のデータをdict型のkeyとvalueに置き換えてデータを作成し、変数に代入する。
# ファンズワース邸の面積のvalueは145.2ですが、int型(整数)を使いたいので145にしています。
villa_savoye = {"建築":"サヴォア邸", "建築家":"ル・コルビジェ", "所在地":"フランス", "面積":440}
farnsworth_house = {"建築":"ファンズワース邸", "建築家":"ミース・ヴァン・デル・ローエ", "所在地":"アメリカ", "面積":145}
fallingwater = {"建築":"落水荘", "建築家":"フランク・ロイド・ライト", "所在地":"アメリカ", "面積":495}

# サヴォア邸の建築家を示すデータを取得して変数に代入する。角かっこ[]でキーを指定する。
villa_savoye_architect = villa_savoye["建築家"]

# 変数villa_savoye_architectを表示する。
print("建築家:" + villa_savoye_architect)

次のようにサヴォア邸の建築家の名前が表示されました。

Pythonにはもっと高度なデータの扱い方もありますが、まずは基本の方を覚えて基礎をしっかり固めましょう。

サヴォア邸の情報とデータ型の関係その3のまとめ

今回はdict型の説明を行いました。

dict型って何?
  • dict型のデータは波かっこ{ }でキー:バリューをはさむ
  • 表形式のような複雑なデータも整理できる

データに合わせてデータ型を選ぶ必要があります。

次回は計算をPythonにやってもらいましょう。

「【独学】建築設計でかんたんPython入門!」シリーズのほかの記事はこちらからどうぞ。

ためになったらシェアお願いします!

コメント

コメントする

この記事のコンテンツ