您可以使计数器成为一个包含一个元素的列表,从而有效地使其成为可变的:
user_to_count_map = {}
for username in list_of_usernames:
x = user_to_count_map.setdefault(username, [0])
x[0] += 1
for username, counter in sorted(user_to_count_map.items()):
print username, counter[0]
我不确定这是否会使您的代码更具可读性,因为显式优于隐式。
或者,如果使用 python 2.7 或更新版本(或使用方便的 backport),您可以使用Counter
object:
from collections import Counter
user_to_count_map = Counter()
for username in list_of_usernames:
user_to_count_map[username] += 1
for username, counter in sorted(user_to_count_map.items()):
print username, counter[0]
请注意,通过使用 aCounter
您有一个字典会自动为您提供默认值 0。否则它就像一个保存整数值的字典,因此您可以以任何您喜欢的方式递增和递减这些值(包括添加超过 1)。
使用 , 也可以在 collections 模块中获得相同的效果defaultdict
,但请注意Counter
该类提供了功能。defaultdict
存在于 python 2.5 及更高版本中;例子:
from collections import defaultdict
user_to_count_map = defaultdict(lambda: 0)
for username in list_of_usernames:
user_to_count_map[username] += 1
或者,您可以完全放弃 setdefault ,因为无论如何您总是分配回映射:
user_to_count_map = {}
for username in list_of_usernames:
x = user_to_count_map.get(username, 0)
x += 1
user_to_count_map[x] = x
for username, counter in sorted(user_to_count_map.items()):
print username, counter[0]