统计集合中多次出现的元素数量

13 投票
3 回答
28378 浏览
提问于 2025-04-16 10:18
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}}

撰写回答