Counter
对象中唯一可存在的值类型是int,您将无法使用Counter
表示嵌套字典。
以下是使用普通字典(counter = {}
)执行此操作的一种方法。首先,要更新递增值单个键:
counter[key1] = counter.setdefault(key1, 0) + 1
或者钥匙的任意列表创建嵌套结构:
tmp = counter
for key in key_list[:-1]:
tmp = tmp.setdefault(key, {})
tmp[key_list[-1]] = tmp.setdefault(key_list[-1], 0) + 1
我可能把它变成了如下功能:
def incr(counter, val, *keys):
tmp = counter
for key in keys[:-1]:
tmp = tmp.setdefault(key, {})
tmp[keys[-1]] = tmp.setdefault(keys[-1], 0) + val
实施例:
>>> counter = {}
>>> incr(counter, 1, 'a')
>>> counter
{'a': 1}
>>> incr(counter, 2, 'a')
>>> counter
{'a': 3}
>>> incr(counter, 2, 'b', 'c', 'd')
>>> counter
{'a': 3, 'b': {'c': {'d': 2}}}
>>> incr(counter, 3, 'b', 'c', 'd')
>>> counter
{'a': 3, 'b': {'c': {'d': 5}}}
为什么你需要有钥匙拼图? – Blender 2013-03-14 20:12:35