Python 辞書dictionaryの使い方-MAYA アーティストのスクリプト入門-

maya_py_dictionary_topimage

Pythonにはリストに似た配列 辞書dictionary があります。

辞書を使うと

関連付けた2つの要素を一組にして、片方は key鍵 もう片方は value要素 にした配列から、key鍵を使ってvalue要素を取り出す事ができます。

例えば 各都道府県のタワーの辞書を作ります

  • 東京は東京タワー
  • 大阪は通天閣
  • 北海道はさっぽろテレビ塔
  • 福岡は福岡タワー


この中から「大阪のタワー」を知りたい時に「大阪」を key鍵 にすると「通天閣」を取り出すことができます。

Pythonの辞書Dictionaryを使いこなせる様になると、とても使い勝手の良い便利な機能だとわかるはずです。

Pythonスクリプトでは割と良く使うので是非覚えてください。

Pythonの辞書dictionaryの基本的な使い方

「{}」で囲う

リストは「[]」で囲みましたが、辞書Dictionaryは「{}」で囲みます。

key鍵 と value要素

辞書は Key(鍵) と value(要素)の組み合わせて並べます。

都道府県のタワーを辞書にすると

todofukenTower = {"tokyo":"TokyoTower","osaka":"Tsutenkaku","hokkaido":"sapporo-tv-tower","fukuoka":"fukuoka-tower"}

となります。

key鍵とvalue要素を「:」で繋げると組にする事ができます。

key鍵を使ってvalue要素を取り出す

辞書Dictionaryからkey鍵を使ってvalue要素を取り出す方法は

辞書名[Key鍵]

で取り出します。

都道府県タワーの辞書から「北海道」のkey鍵”hokkaido“を使って要素を取り出してみます。

todofukenTower = {"tokyo":"TokyoTower","osaka":"Tsutenkaku","hokkaido":"sapporo-tv-tower","fukuoka":"fukuoka-tower"}

print(todofukenTower["hokkaido"])

実行結果:

sapporo-tv-tower

sapporo-tv-tower が取り出せました。

文字列 と 数値

都道府県タワーはkey鍵とValue要素のどちらも文字列でしたが、数値でも大丈夫です。

key鍵を文字列 Value要素を数値

{"tokyo":13,"osaka":27,"hokkaido":01,"fukuoka":40}


key鍵を数値 Value要素を文字列

{333:"TokyoTower",103:"Tsutenkaku",147:"sapporo-tv-tower",234:"fukuoka-tower"}


辞書にはリストのような順番の概念がありません。

辞書に要素を追加する

辞書にkey鍵とValue要素を追加するには

辞書名[key鍵] = Value要素

で追加できます。

都道府県タワーの辞書に愛知のタワーを追加します。

todofukenTower = {"tokyo":"TokyoTower","osaka":"Tsutenkaku","hokkaido":"sapporo-tv-tower","fukuoka":"fukuoka-tower"}

todofukenTower["aichi"]="nagoya-tv-tower"

print(todofukenTower)

実行結果:

{‘fukuoka’: ‘fukuoka-tower’, ‘osaka’: ‘Tsutenkaku’, ‘hokkaido’: ‘sapporo-tv-tower’, ‘aichi’: ‘nagoya-tv-tower’, ‘tokyo’: ‘TokyoTower’}

‘aichi’: ‘nagoya-tv-tower’ が追加されました。

辞書から特定の要素を削除する

辞書からkey鍵とValue要素の組を削除するには

辞書名.pop(key鍵)

で削除できます。

都道府県タワーの辞書から大阪のタワーを削除します。

todofukenTower = {'fukuoka': 'fukuoka-tower', 'osaka': 'Tsutenkaku', 'hokkaido': 'sapporo-tv-tower', 'aichi': 'nagoya-tv-tower', 'tokyo': 'TokyoTower'}

todofukenTower.pop("osaka")

print(todofukenTower)

実行結果:

{‘fukuoka’: ‘fukuoka-tower’, ‘tokyo’: ‘TokyoTower’, ‘hokkaido’: ‘sapporo-tv-tower’, ‘aichi’: ‘nagoya-tv-tower’}

‘osaka’: ‘Tsutenkaku’ が削除されました。

辞書に特定のkey鍵又はValue要素が含まれているか検索

辞書に目的のkey鍵 又は Value要素 が含まれているかを確認する事ができます。

特定のkey鍵が含まれているか検索する場合は
 
key鍵 in 辞書名.keys()

特定のvalue要素が含まれているか検索する場合は

value要素 in 辞書名.values()

で検索確認できます。


都道府県タワーの辞書に福岡のkey鍵”fukuoka”が在るか確認してみます。

todofukenTower = {'fukuoka': 'fukuoka-tower', 'tokyo': 'TokyoTower', 'hokkaido': 'sapporo-tv-tower', 'aichi': 'nagoya-tv-tower'}

print("fukuoka" in todofukenTower.keys())

実行結果:

True

todofukenTowerにkey鍵 ”fukuoka“ が含まれたいるので True が返されました。もし含まれたいなかったら False が返されます。

今度はvalue要素 京都タワー が含まれているか確認してみましょう。

todofukenTower = {'fukuoka': 'fukuoka-tower', 'tokyo': 'TokyoTower', 'hokkaido': 'sapporo-tv-tower', 'aichi': 'nagoya-tv-tower'}

if "kyotoTower" in todofukenTower.values():
    print("found kyotoTower")
else:
    print("not found kyotoTower")

実行結果:

not found kyotoTower

if文の中で検索しました。
todofukenTowerにValue要素 “kyotoTower” は含まれたなかったので False を返した為 ”not found kyotoTower” を返しました。

※if文の詳しい内容は別の記事に書きました。是非よんでみてください。
[Python] if文の使い方 MAYAアーティストのスクリプト入門

辞書から要素を取り出す時に Key鍵を使いますが辞書の中に指定したKey鍵が無かった場合エラーが返されるのでkey鍵が存在するか曖昧な場合は、取り出す前に確認すると良いでしょう。

辞書に別の辞書を追加する

辞書にKey鍵とValue要素を追加する方法は紹介しましたが、辞書に別の辞書を追加する事もできます。

都道府県タワーの辞書 todofukenTower に 大阪タワーの辞書を追加します。

osakaTower = {"abeno":"abenoharukas","umeda":"umeda-skyBulding","naniwa":"tsutenkaku"}

todofukenTower = {'fukuoka': 'fukuoka-tower', 'tokyo': 'TokyoTower', 'hokkaido': 'sapporo-tv-tower', 'aichi': 'nagoya-tv-tower'}

todofukenTower["osaka"] = osakaTower

print(todofukenTower)

実行結果:

{‘fukuoka’: ‘fukuoka-tower’, ‘osaka’: {‘umeda’: ‘umeda-skyBulding’, ‘naniwa’: ‘tsutenkaku’, ‘abeno’: ‘abenoharukas’}, ‘hokkaido’: ‘sapporo-tv-tower’, ‘aichi’: ‘nagoya-tv-tower’, ‘tokyo’: ‘TokyoTower’}

key鍵 が”osaka” の辞書がValue要素として追加されました。

Value要素にはその他にリストやセット等も追加する事ができます。

MAYAで辞書を使ったPythonスクリプト

スクリプト内容:
「オブジェクトの形(オブジェクト名)で色分けする」

import maya.cmds as cmds
polyColor = {"pCube":(1.0, 0.0, 0.0),"pSphere":(0.0, 1.0, 0.0),"pCylinder":(0.0, 0.0, 1.0)}

selObj_list = cmds.ls(sl=True)

for i_selObj in selObj_list:
    polyColor_value = polyColor[i_selObj[:-1]]
    
    cmds.polyColorPerVertex(i_selObj,rgb=(polyColor_value[0], polyColor_value[1], polyColor_value[2]), cdo=True )

解説:

polyColor = {"pCube":(1.0, 0.0, 0.0),"pSphere":(0.0, 1.0, 0.0),"pCylinder":(0.0, 0.0, 1.0)}

色分けを判別する辞書です。
オブジェクトの末尾の番号を抜いた名前をKey鍵にしてRGBの数値のリストをValue要素に設定。
オブジェクト名が”pCube”だったらRGBが(1.0, 0.0, 0.0)、”pSphere”だったら(0.0, 1.0, 0.0)、”pCylinder”だったら(0.0, 0.0, 1.0)

selObj_list = cmds.ls(sl=True)

選択したオブジェクトのリスト


for i_selObj in selObj_list:
    polyColor_value = polyColor[i_selObj[:-1]]

for文 オブジェクトの末尾の番号を抜いた名前をKey鍵にしてRGB値のリストを取得

i_selObj[:-1]

[:-1]で文字列の末尾より前を抜き出します。

例:

str = "pCylinder3"
print(str[:-1])

#結果
pCylinder
cmds.polyColorPerVertex(i_selObj,rgb=(polyColor_value[0], polyColor_value[1], polyColor_value[2]), cdo=True )

key鍵によって判別されたRGBでポリゴンオブジェクトが色分けされます。


スクリプトを実行:

オブジェクトを選択してスクリプトを実行します。

maya_py_dictionary_selectObjs
selected objects


結果:

pCubeキューブは赤 pSphereスフィアは緑 pCylinderシリンダーは青 に色分けされました。

polyColorPerVertex

まとめ

Pythonの辞書Dictionaryの使い方を紹介しました。

  • 辞書Dictionaryは「{}」で囲みKey(鍵) とvalue(要素)の組にして並べます。
    {key鍵:value要素,key鍵:value要素}
  • 辞書Dictionaryからkey鍵を使ってvalue要素を取り出す方法は
    辞書名[Key鍵]
  • 辞書にkey鍵とValue要素を追加するには
    辞書名[key鍵] = Value要素
  • 辞書からkey鍵とValue要素の組を削除するには
    辞書名.pop(key鍵)
  • key鍵が含まれているか検索する場合は 
    key鍵 in 辞書名.keys()
  • value要素が含まれているか検索する場合は
    value要素 in 辞書名.values()

辞書を使いこなせるようになるとリストでは煩雑になってしまうコードも明瞭にできます。
リストの様に順番の概念が無いので、要素を入れ替えした時に並び順を気にする必要もありません。

Pythonスクリプトを書く上で使わないと損です。是非覚えてみてください。

以上です

おすすめの関連記事:
コチラの記事も読まれています
タグ: , ,