统计集合中多次出现的元素数量
if group not in g:
g[group] = set()
g[group].add(name)
这个代码会遍历一个特定结构的组列表:
Group: A
Name: Bob
然后把属于某个特定组的人的名字添加到一个集合里。集合里的名字是唯一的,我们不知道一个组里有多少个相同的名字。所以,比如说如果有两个叫'Bob'的人或者五个叫'Mike'的人,我该怎么计算这些名字出现的次数,以便得到类似这样的结果:
Group A: Bob 2, Mike 5
Group B: Jane 4
等等。提前谢谢你。
3 个回答
-3
from collections import Counter, defaultdict
这里有一段代码,首先定义了一个列表,里面包含了一些组和名字的配对,比如 ('B', 'Bob') 表示 Bob 在 B 组。
接下来,代码定义了一个叫做 groups 的函数。这个函数的作用是统计每个组里有多少人,并把结果整理成一个更容易理解的格式。
在函数里,首先用 Counter 来计算每个组和名字出现的次数。然后,创建一个叫 result 的字典,用来存放最终的结果。
接着,代码通过循环遍历每个组和名字的配对,把统计的结果放到 result 里。最后,函数返回这个整理好的结果。
总的来说,这段代码的目的是把一个包含组和名字的列表,转化为一个更清晰的结构,方便查看每个组里有多少人。
54
看起来你可能更适合使用一个叫做 Counter 的工具:
>>> from collections import Counter
>>> mylist = ["Bob", "Mike", "Bob", "Mike", "Mike", "Mike", "Bob"]
>>> Counter(mylist)
Counter({'Mike': 4, 'Bob': 3})
5
使用一个字典的字典来进行计数,比如可以这样做:
tralala = dict()
for group, name in [('A', 'Bob'), ('B', 'Jane'), ('A', 'Bob')]:
tralala.setdefault(group, dict()).setdefault(name, 0)
tralala[group][name] += 1
print tralala
这样做的结果是
{'A': {'Bob': 2}, 'B': {'Jane': 1}}