SF #904720: dict.update should take a 2-tuple sequence like dict.__init_
(Championed by Bob Ippolito.)
The update() method for mappings now accepts all the same argument forms
as the dict() constructor. This includes item lists and/or keyword
arguments.
diff --git a/Lib/weakref.py b/Lib/weakref.py
index 09bed65..5c66186 100644
--- a/Lib/weakref.py
+++ b/Lib/weakref.py
@@ -122,10 +122,15 @@
else:
return wr()
- def update(self, dict):
+ def update(self, dict=None, **kwargs):
d = self.data
- for key, o in dict.items():
- d[key] = ref(o, self.__makeremove(key))
+ if dict is not None:
+ if not hasattr(dict, "items"):
+ dict = type({})(dict)
+ for key, o in dict.items():
+ d[key] = ref(o, self.__makeremove(key))
+ if len(kwargs):
+ self.update(kwargs)
def values(self):
L = []
@@ -239,10 +244,15 @@
def setdefault(self, key, default):
return self.data.setdefault(ref(key, self._remove),default)
- def update(self, dict):
+ def update(self, dict=None, **kwargs):
d = self.data
- for key, value in dict.items():
- d[ref(key, self._remove)] = value
+ if dict is not None:
+ if not hasattr(dict, "items"):
+ dict = type({})(dict)
+ for key, value in dict.items():
+ d[ref(key, self._remove)] = value
+ if len(kwargs):
+ self.update(kwargs)
class BaseIter: