这collections.Counter()堂课非常方便.只需几行代码就可以实现类似的东西; 但是当你记得使用它时,很高兴它出现在标准库中.
事实上,我很尴尬的是,我经常重写那些三到四行代码而不是使用它.
但我经常需要做一些非常相似的事情......将值累积到字典中的键中.但是,区别在于我想将值累积为列表而不是仅仅计算它们.例如,最近我想处理一大堆LDAP DN,我想写这样的东西:
#!python
f = 'o=Foo,ou=bar,cn=this,dc=sub,dc=org,dc=somewhere,dc=not'
d = dict()
for i in f.split(','):
k, v = i.split('=')
if k not in d:
d[k] = list()
d[k].append(v)
Run Code Online (Sandbox Code Playgroud)
(这是为了让我能够轻松生成从搜索中返回的所有项目的列表,这些项目远比DN规范冗长:Foo:bar:this@sub.org.somewhwere.not,但这或多或少与这个问题).
标准库中是否已存在某种"累加器"类?某种类似于"更新"或计数器的东西,但附加值
你可以collections.defaultdict像这样使用
d = collections.defaultdict(list)
for i in f.split(','):
k, v = i.split('=')
d[k].append(v)
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,你可以dict.setdefault像这样使用
>>> d = {}
>>> for i in f.split(','):
... k, v = i.split('=')
... d.setdefault(k, []).append(v)
...
>>> d
{'cn': ['this'], 'dc': ['sub', 'org', 'somewhere', 'not'], 'o': ['Foo'], 'ou': ['bar']}
Run Code Online (Sandbox Code Playgroud)