In Python, this is the best code I could come up with for adding a new key, value to a dict

mytable.setdefault( k, [] ).append( v )

Naturally, right after writing my post I found that there is
an easier way:

table[ k ] = v

Just to be clear...these do two VERY different things:

  >>> v1=42
  >>> table1={}
  >>> k='foo'
  >>> table1.setdefault(k,[]).append(v1)
  >>> table2={}
  >>> table2[k]=v1
  >>> table1, table2
  ({'foo': [42]}, {'foo': 42})

Note that the value in the first case is a *list* while the
value in the 2nd case, the value is a scalar. These differ in the behavior (continuing from above):

  >>> v2='Second value'
  >>> table1.setdefault(k,[]).append(v2)
  >>> table2[k]=v2
  >>> table1, table2
  ({'foo': [42, 'Second value']}, {'foo': 'Second value'})

Note that table1 now has *two* values associated with 'foo', while table2 only has the most recently assigned value.

Choose according to your use-case. For some of my ETL & data-processing work, I often want the

  mydict.setdefault(key, []).append(value)

version to accrue values associated with a given unique key.

-tkc






--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to