On Thu, 02 Aug 2007 06:32:11 +0000, james_027 wrote: > hi > > for example I have this dictionary > > dict = {'name':'james', 'language':'english'}
First of all, this is a bad name because it shadows (overwrites) the reference to the builtin constructor, `dict`. > value = 'sex' in dict and dict['sex'] or 'unknown' > > is a right pythonic of doing this one? I am trying to get a value from > the dict, but if the key doesn't exist I will provide one. If you're using using Python 2.5, you could do this without `and`/`or` trickery:: >>> d['name'] if 'name' in d else 'unknown' 'james' >>> d['sex'] if 'sex' in d else 'unknown' 'unknown' But there are more elegant ways. For example, the `get` method:: >>> d.get('name', 'unknown') 'james' >>> d.get('sex', 'unknown') 'unknown' See the `Python Library Reference, 3.8: Mapping types <http:// docs.python.org/lib/typesmapping.html#l2h-294>` for more information on `dict` methods. Or you could use the `collections.defaultdict <http://docs.python.org/lib/ defaultdict-objects.html>` type (new in 2.5, too), which I consider most elegant:: >>> from collections import defaultdict >>> d2 = defaultdict(lambda:'unknown', d) >>> d2['name'] 'james' >>> d2['sex'] 'unknown' HTH, Stargaming -- http://mail.python.org/mailman/listinfo/python-list