【独学】建築設計でかんたんPython入門!:サヴォア邸の情報で理解するデータ型 その3

ノンプログラマーのための「建築で理解するPython入門」の基礎編7回目です。今回はPyCharmを使ってPythonのデータ型であるdict型を解説します。

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

この記事のコンテンツ

建築情報でざっくり分かるデータ型のはなし!その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というPythonファイルを作成してコードをコピペして上書き保存、PyCharm内のコマンドプロンプトから「py DataType3.py」で起動してみました。次のように出力されますね。

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

パンナ
パンナ

えっと入れ子になっててわかりにくい。変数listsの中の0,1……2番目のデータの0……2番目のデータかな?

この長さならギリわかるけどこれ以上長くなったら間違えそう……

list型のデータのネストが深くなってくると、とにかく分かりにくくなってきます!
他の整理方法は無いのでしょうか!

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

list型のいいところ

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

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

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

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

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

dict型のデータは波かっこ{ }でキー:バリューをはさむ!
{ key01 : value01 , key02 : value02 , …… , keyN : valueN }

一旦無視でいいですが、キーには変更不可能なオブジェクトしかつかえないというおまじないがかかっています。これはまた別の機会に説明しますので、今回はdict型のデータの作り方を理解しましょう。

キーとバリューでコロン「:」をはさんで、それを波かっこで囲えばいいんですね。複数のキーとバリューのセットがあればカンマ「,」で区切りましょう。

dict型のデータ構造をなんとなく理解できました。

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型のデータの中身をインデックスだけで判断しようとするのは難しいですね。一旦表にして確認しましょう。

建築建築家所在地面積
サヴォア邸ル・コルビジェフランス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型のデータは波かっこ{ }でキー:バリューをはさむ
  • 表形式のような複雑なデータも整理できる

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

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

あわせて読みたい
【独学】ノンプログラマーのための「建築で理解するPython入門」 人気のプログラミング言語であるPythonは建築業界でも使われはじめています。 周りでも使える人増えてきてるみたいだし、プログラミングスキルは身につけておいても損は...
ためになったらシェアお願いします!

コメント

コメントする

この記事のコンテンツ
閉じる