QBoard » Advanced Visualizations » Viz - Python » python dict.update vs. subscript to add a single key/value pair

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

  • 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?

      August 10, 2021 3:18 PM IST
    0
  • 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.

     
      September 4, 2021 12:38 PM IST
    0
  • 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
      December 15, 2021 12:37 PM IST
    0
  • I personally use mydict['newkey'] = 'newvalue'
    I guess this method is standard way of assigning the value, other one i didnt try, Can you explain how it is less efficient compare to this?
      August 13, 2021 12:05 AM IST
    0