Every semester I have at least one Python student who uses dict.update()
to add a single key/value pair, viz.:
mydict.update({'newkey':'newvalue'})
instead of
mydict['newkey'] = 'newvalue'
I don't teach this method and I don't know where they're finding examples of this, but I tell them not to do it because it's less efficient (presumably creates a new 2-element dict) and because it's nonstandard.
Honestly, I can understand the desire to use a visible method rather than this syntax - it perhaps feels more consistent with other method calls. But I think it looks like a newbie approach.
Is there any wisdom anyone has to offer on this point?
In Python, we can add multiple key-value pairs to an existing dictionary. This is achieved by using the update() method. This method takes an argument of type dict or any iterable that has the length of two - like ((key1, value1),) , and updates the dictionary with new key-value pairs.
The dict. update() method updates the dictionary with the key-value pairs from another dictionary or another iterable such as tuple having key-value pairs.
With CPython 2.7, using dict() to create dictionaries takes up to 6 times longer and involves more memory allocation operations than the literal syntax. Use {} to create dictionaries, especially if you are pre-populating them, unless the literal syntax does not work for your case.
Python Dictionary update all valuesWe can easily do this by using update() function. The python update() method updates the dictionary with the key and value pairs. It inserts a key/value if it is not present. It updates the key/value if it is already present in the dictionary.
A benchmark shows your suspicions of its performance impact appear to be correct:
$ python -m timeit -s 'd = {"key": "value"}' 'd["key"] = "value"' 10000000 loops, best of 3: 0.0741 usec per loop $ python -m timeit -s 'd = {"key": "value"}' 'd.update(key="value")' 1000000 loops, best of 3: 0.294 usec per loop $ python -m timeit -s 'd = {"key": "value"}' 'd.update({"key": "value"})' 1000000 loops, best of 3: 0.461 usec per loop
That is, it's about six times slower on my machine. However, Python is already not a language you'd use if you need top performance, so I'd just recommend use of whatever is most readable in the situation. For many things, that would be the []
way, though update
could be more readable in a situation like this:
configuration.update( timeout=60, host='example.com', )
…or something like that.
Updating the key directly is thrice as fast, but YMMV:
$ python -m timeit 'd={"k":1}; d.update({"k":2})' 1000000 loops, best of 3: 0.669 usec per loop $ python -m timeit 'd={"k":1}; d["k"] = 2' 1000000 loops, best of 3: 0.212 usec per loop
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