《48》更新:メソッド update〈Python 2.x 版〉

実録:はじめてのプログラミング記事一覧
《48》更新:メソッド update

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

今日の進捗

  • The Python Standard Library: Mapping Types — dict
  • Python.use(better) -- セミナー研修テキスト
  • 連想リスト課題を「続・ひよ子のきもち」で公開
Comment
本人:野中 2か月どうもありがとうございました。この経験をインターンシップで活かせたらと思います。
担当:伊藤/本間 。(^^)

更新:メソッド update

組み込み型 dict と同様に、メソッド update を利用して既存の連想リストを更新できると便利です。すると、

def ex():
    m1 = myDict((e,ord(e)) for e in "AB")
    print m1,"\t#",m1.__class__.__name__,id(m1)
    m2 = myDict*1( for e in "AB")
    print m1,"\t#",m1.__class__.__name__,id(m1)
    m2 = myDict((e,hex(ord(e))) for e in "BC")
    m1.update(m2,B=2,D=4)
    print m1,"\t#",m1.__class__.__name__,id(m1)

>>> ex()
{'A': 65, 'B': 66} 	# myDict 13471280
{'A': 65, 'B': '0x42', 'C': '0x43'} 	# myDict 13471280
{'A': 65, 'B': 66} 	# myDict 13471504
{'A': 65, 'B': 2, 'C': '0x43', 'D': 4} 	# myDict 13471504

引数に指定したものと同じキー要素が存在するときには、値要素を更新します。例えば、文字列 'B' は存在するので、対応する値 '0x42' を設定します。引数に指定したものと同じキー要素が存在しないときには、要素対を追加します。例えば、文字列 'C' は存在しないので、対応する値 '0x43' を設定します。
また、キーワード引数を利用して要素対を指定できます。ただしその場合には、キー要素は文字列を指定したものと見なされます。例えば、文字列 'B' は存在するので、対応する値 2 を設定します。例えば、文字列 'D' は存在しないので、対応する値 4 を設定します。

class myDict(object):
    ...
    def update(self, d1, **d2):
        for k,v in d1.items():
            self[k] = v
        for k,v in d2.items():
            self[k] = v

指定した位置引数 d1 に含まれる要素対 k,v をもとに、キー要素 k とそれに対応する値要素 v を設定します。指定したキーワード引数 d1 に含まれる要素対 k,v をもとに、キー要素 k とそれに対応する値要素 v を設定します。
《Note》ここでも、演算子 [] を再利用することで、メソッドを実現するときに、簡潔で見通しの良いコードを記述できます。《りす》□

受講者への課題

VDM++ で規定された演算 munion に準拠した)次のメソッドを実現してください。

class myList(object):
    def union(self, d1, **d2):
        ...

>>> m = myDict((e,ord(e)) for e in "AB"); m
{'A': 65, 'B': 66}
>>> m2 = myDict((e,ord(e)) for e in "BC"); m2
{'B': 66, 'C': 67}

2つの異なる(重複する要素対を含む)連想リストを生成します。ここでは、同じキー要素 'B' は、同じ値要素 66 が対応します。

>>> m.union(m2)
{'A': 65, 'B': 66, 'C': 67}

2つの異なる連想リストを併合した、新たな連想リストを生成します。

>>> m.union(m2,D=4)
{'A': 65, 'B': 66, 'C': 67, 'D': 4}

2つの異なる連想リストを併合するとともに、キーワード引数で指定された要素対を含む、新たな連想リストを生成します。■

Tips

Last updated♪09/03/21

*1:e,hex(ord(e))) for e in "BC") m1.update(m2) print m1,"\t#",m1.__class__.__name__,id(m1) m1 = myDict)((e,ord(e