《45》削除:メソッド __delitem__〈Python 2.x 版〉

実録:はじめてのプログラミング記事一覧
《45》削除:メソッド __delitem__

《著》小粒ちゃん+α《監修》小泉ひよ子とタマゴ倶楽部
2009年3月17日(火)

今日の進捗

  • The Python Standard Library: Mapping Types — dict
  • Python.use(better) -- セミナー研修テキスト
  • 連想リスト課題を「続・ひよ子のきもち」で公開
Comment
本人:野中 福岡の桜はもうすぐ満開です。それまでに課題も完成したいです。
担当:伊藤/本間 。(^^)

削除:メソッド __delitem__

組み込み型 dict と同様に、del 文を利用して要素対を削除できると便利です。すると、

def ex():
    m = myDict((e,ord(e)) for e in "ABC")
    for e in "B@":
        print "-->",m,"\t#",m.__class__.__name__
        del m[e]
        print "<--",m,e

>>> ex()
    • > {'A': 65, 'B': 66, 'C': 67} # myDict
<-- {'A': 65, 'C': 67} B
    • > {'A': 65, 'C': 67} # myDict
Traceback (most recent call last): ... raise KeyError,key KeyError: '@'

キー要素を指定して(それと対応する)要素対を削除できるのが分かります。また、存在しないキー要素を指定すると、例外 KeyError を生成して、エラーメッセージを出力します。そこで、

class myDict(object):
    ...
    def __delitem__(self, key):
        for i,k in enumerate(self):
            if k==key:
                del self._keys  [i]
                del self._values[i]
                break
        else:
            raise KeyError,key

局所変数 k が、指定した引数 key と同じ値になるとき、同じオフセット位置 i にある要素対 self._keys/self._values を削除します。条件を満たす要素が見つからないときには、例外 KeyError を生成するとともに、プログラマーへの注意を促すエラーメッセージを出力します。

Tips

組み込み関数 enumerate と組み合わせて利用できるようになるのも、〈GoFIterator パターンの効能のひとつです。《りす》□

Last updated♪09/03/18