duck typing at will

Ned Deily nad at acm.org
Tue Dec 30 14:13:47 EST 2008


In article 
<6e1bfdea0812301042x70ab57capf99ce73d364d54db at mail.gmail.com>,
 "Jose Mora" <trylks at gmail.com> wrote:
>[...]
> I mean, some tasks are rather boring in python when compared with php,
> for example, let's imagine we have a dictionary that contains
> dictionaries that contain the times that a key appears. We, or at
> least I, would like to write something as short as:
> 
> dict[k1][k2] += 1
> 
> However we will have to do a longer code (this is the smallest code I
> could come up with):
> 
>     dict = {}
>     if not k1 in dict:
>       dict[k1] = {}
>     if not k2 in dict[k1]:
>       dict[k1][k2] = 0
>     dict[k1][k2] += 1

How about one line plus an import?

$ python2.5
Python 2.5.3c1 (release25-maint, Dec 17 2008, 21:50:37) 
[GCC 4.0.1 (Apple Computer, Inc. build 5363)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from collections import defaultdict
>>> dic = defaultdict(lambda : defaultdict(int))

>>> dic["spam"]["eggs"] += 1
>>> dic[42][3] += 1
>>> dic[42][3] += 1
>>> dic[42][3]
2
>>> dic
defaultdict(<function <lambda> at 0x661f0>, {42: defaultdict(<type 
'int'>, {3: 2}), 'spam': defaultdict(<type 'int'>, {'eggs': 1})})

-- 
 Ned Deily,
 nad at acm.org




More information about the Python-list mailing list