The update() method inserts the specified items to the dictionary. The specified items can be a dictionary, or an iterable object with key value pairs.
The method update() adds dictionary dict2's key-values pairs in to dict. This function does not return anything.
update() method updates the dictionary with elements from a dictionary object or an iterable object of key/value pairs. It doesn't return any value (returns None ).
Python Dictionary items() The items() method returns a view object that displays a list of dictionary's (key, value) tuple pairs.
Python's mostly implementing a pragmatically tinged flavor of command-query separation: mutators return None
(with pragmatically induced exceptions such as pop
;-) so they can't possibly be confused with accessors (and in the same vein, assignment is not an expression, the statement-expression separation is there, and so forth).
That doesn't mean there aren't a lot of ways to merge things up when you really want, e.g., dict(a, **award_dict)
makes a new dict much like the one you appear to wish .update
returned -- so why not use THAT if you really feel it's important?
Edit: btw, no need, in your specific case, to create a
along the way, either:
dict(name=name, description=desc % count, points=points, parent_award=parent,
**award_dict)
creates a single dict with exactly the same semantics as your a.update(award_dict)
(including, in case of conflicts, the fact that entries in award_dict
override those you're giving explicitly; to get the other semantics, i.e., to have explicit entries "winning" such conflicts, pass award_dict
as the sole positional arg, before the keyword ones, and bereft of the **
form -- dict(award_dict, name=name
etc etc).
Python's API, by convention, distinguishes between procedures and functions. Functions compute new values out of their parameters (including any target object); procedures modify objects and don't return anything (i.e. they return None). So procedures have side effects, functions don't. update is a procedure, hence it doesn't return a value.
The motivation for doing it that way is that otherwise, you may get undesirable side effects. Consider
bar = foo.reverse()
If reverse (which reverses the list in-place) would also return the list, users may think that reverse returns a new list which gets assigned to bar, and never notice that foo also gets modified. By making reverse return None, they immediately recognize that bar is not the result of the reversal, and will look more close what the effect of reverse is.
This is easy as:
(lambda d: d.update(dict2) or d)(d1)
Or, if it is important not to modify the dictionary:
(lambda d: d.update(dict2) or d)(d1.copy())
>>> dict_merge = lambda a,b: a.update(b) or a
>>> dict_merge({'a':1, 'b':3},{'c':5})
{'a': 1, 'c': 5, 'b': 3}
Note that as well as returning the merged dict, it modifies the first parameter in-place. So dict_merge(a,b) will modify a.
Or, of course, you can do it all inline:
>>> (lambda a,b: a.update(b) or a)({'a':1, 'b':3},{'c':5})
{'a': 1, 'c': 5, 'b': 3}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With