《48》更新:メソッド update〈Python 2.x 版〉
実録:はじめてのプログラミング《記事一覧》
《48》更新:メソッド update
今日の進捗
- 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
*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