Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python dict.update vs. subscript to add a single key/value pair [closed]

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?

like image 229
David B. Avatar asked Mar 17 '13 00:03

David B.


People also ask

How do you add key-value pairs to an existing dictionary?

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.

What does dict update do?

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.

Should I use dict () or {}?

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.

Can we update key-value in dictionary in Python?

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.


2 Answers

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.

like image 60
icktoofay Avatar answered Sep 19 '22 10:09

icktoofay


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 
like image 30
kay Avatar answered Sep 21 '22 10:09

kay