作者: 機械伯爵
日時: 2002/6/23(23:21)
 ども、機械です。

 Pythonの「辞書」とよばれるコレクションは、AWKの「連想配列」に
相当する(実際は+α)ものだということは、ご存知の方も多いと思い
ます。

 で、AWKには他にコレクション型はありませんので、リストその他を
すべて連想配列でこなします。

 当然、添え字が数字の一般の配列もこの連想配列で実装するわけです。

 となると、Pythonの辞書でも同じことができるわけです。

 辞書を使われる方は、どうしてもその名称から文字列をキーとする場合
が多いのですが、別段普通の整数をキーにしてもかまわないわけです。

 そんなことをして何の意味があるのか・・・

 実は、可変長リストを考える際に、ファジーな辞書のほうが都合がいい
場合もあるんです。

 リストは、可変長といいながら、リスト項目を超えるインデックスに代入
すると、エラーを起こします。

 リスト項目を追加するにはappendメソッド、リスト項目を変更するには
代入、というように、追加か代入かは、現在のリストの状態がわかっていな
ければ出来ないわけです。

 これに対し、辞書にはそもそも順序がありませんので、適当なインデックス
に適当な数値を放り込んでも一向に構いません。

 追加も更新も、同じ代入の手順で行えます。

 順序は存在しながら、全ての項目が必要無いスケジュールのような情報は、
リストで管理するよりも辞書で管理したほうが遥かに効率が良いでしょう。

※私は、生徒の自由課題の提出チェックに使用しています。

 あと裏技として、リストは一定のインデックスとインデックスの間に項目
を入れる場合、インデックスの変更の必要がありますが、辞書では小数(!)
のインデックスが書けるので、インデックスの変更無しに「間に入れる」とい
うファジーな操作が有効です。

 若干問題があるとすれば、昇順や降順で呼び出そうとすると、キーのリスト
をソートしてforループを使わなければならない、という点でしょうか。

 リストはリストで便利な利用法がありますが、辞書のキーに数字を使うのは
結構便利なので、是非一度お試しアレ。

※蛇足・・・タプルをキーとして多次元配列を実装してみようとしましたが、
 タプルは必ずカッコで囲わなければならないので、これは素直にリストや
 辞書を要素に取る、リストや辞書を作った方が簡単でした。

   機械伯爵