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)
(这是为了让我能够轻松地生成从搜索返回的所有项目的列表,它远没有 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)
但在这种情况下,您可以使用 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']}
