在Perl中,我可以这样做:
push(@{$h->[x]}, y);
Run Code Online (Sandbox Code Playgroud)
我可以根据上面的Perl示例简化以下python代码吗?
if x not in h:
h[x] = []
h[x].append(y)
Run Code Online (Sandbox Code Playgroud)
我想简化这个,因为它在我的代码中有很多地方,(我不能用[]初始化所有可能的x).我不想让它成为一个函数,因为没有'inline'关键字.
有任何想法吗?
一个非常优雅的方式(自Python 2.5起)将使用defaultdict"collections"模块:
>>> from collections import defaultdict
>>> h = defaultdict(list)
>>> h['a'].append('b')
>>> h
defaultdict(<type 'list'>, {'a': ['b']})
Run Code Online (Sandbox Code Playgroud)
defaultdict 就像一个dict,但是在你创建它时使用你传递给它的构造函数提供了一个默认值(在这个例子中是一个列表).
我特别喜欢setdefaultdict方法,因为1)你将变量定义为defaultdict,并且通常不需要对代码进行其他更改(除非删除以前的默认值kludges); 2)setdefault是一个可怕的名字:P