Skip to content Skip to sidebar Skip to footer

How To Make Lists Automatically Instantiate On Use In Python As They Do In Perl?

In Perl, I can do this: push(@{$h->[x]}, y); Can I simplify the following python codes according to above Perl example? if x not in h: h[x] = [] h[x].append(y) I want to sim

Solution 1:

A very elegant way (since Python 2.5) is to use defaultdict from the "collections" module:

>>> from collections import defaultdict
>>> h = defaultdict(list)
>>> h['a'].append('b')
>>> h
defaultdict(<type'list'>, {'a': ['b']})

defaultdict is like a dict, but provides a default value using whichever constructor you passed to it when you created it (in this example, a list).

I particularly like this over the setdefault dict method, because 1) you define the variable as a defaultdict, and generally no other changes are required on the code (except perhaps to remove previous kludges for default values); and 2) setdefault is a terrible name :P

Solution 2:

There are a couple of ways to do this with the dict methods:

h.setdefault(x, []).append(y)

or

h[x] = h.pop(x,[]).append(y)

Solution 3:

You can use setdefault

h = {}
h.setdefault(x, []).append(y)

Post a Comment for "How To Make Lists Automatically Instantiate On Use In Python As They Do In Perl?"