Pat wrote:
I know it's not "fair" to compare language features, but it seems to me (a Python newbie) that appending a new key/value to a dict in Python is awfully cumbersome.

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 )

In Perl, the code looks like this:

$h{ $key } = $value ;

There's a huge difference here:

In your Python example you're using a list. In the Perl example you're using a scalar value.


Is there a better/easier way to code this in Python than the obtuse/arcane setdefault code?

When just assigning a new key-value-pair there's no problem in Python. (Just refer to the answers before.) When I switched from Perl to Python however I commonly ran into this problem:

>>> counter = {}
>>> counter['A'] = 1
>>> counter['A'] += 1
>>> counter['A']
2

Ok - assigning a key-value-pair works fine. Incrementing works as well.

>>> counter['B'] += 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'B'

However incrementing a non-existing key throws an exception. So you either have to use a workaround:

>>> try:
...   counter['B'] += 1
... except KeyError:
...   counter['B'] = 1

Since this looks ugly somebody invented the setdefault method:

>>> counter['B'] = counter.setdefault('B',0) + 1

And this works with lists/arrays as well. When there's no list yet setdefault will create an empty list and append the first value. Otherwise it will just append.

Greetings from Vienna,
mathias
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to