メソッドを実装するディクショナリクラスが必要ですintersection_update
。精神的にdict.update
は、呼び出し元のインスタンスにすでに存在するキーのみに更新を制限します(実装例については以下を参照してください)。
しかし、車輪の再発明の回避の精神で、この追加機能を備えたマッピングクラスの実装(およびテストの作成など)を開始する前に、このようなものは多かれ少なかれ標準モジュールにすでに存在しますか?
明確にするために、intersection_update
私が考えている方法は次のようなことをします:
def intersection_update(self, other):
for k in self.viewkeys() & other.viewkeys():
self[k] = other[k]
...実際の実装では、次のようないくつかの可能な最適化が試行される場合があります。
def intersection_update(self, other):
x, y = (self, other) if len(self) < len(other) else (other, self)
for k in x.iterkeys():
if k in y:
self[k] = other[k]
編集:この投稿の元のバージョンでは、「または、[クラスと]メソッドを実装する必要がない標準のPythonイディオムはありintersection_update
ますか?」と書いていましたが、さらに考えてみると、すぐに削除しました。 Python言語の「コア」を十分に知っているので、そのようなイディオムが存在しないことを確信しているので、それは弱い答えへの誘いであることに気づきました。少なくとも、利点(一般性、読みやすさ、入力のしやすさ)に一致するイディオムはありません。専用メソッドの。