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?"