Python 计算一个集合中的多次出现次数

Python 计算一个集合中的多次出现次数,python,Python,浏览具有此结构的组列表: if group not in g: g[group] = set() g[group].add(name) 并向集合中添加属于特定组的人员的姓名。集合中的名称是唯一的,我们不知道一个组中有多少相似的名称。因此,例如,如果有两个“Bob”名字或5个“Mike”名字,我如何计算这些名字的多次出现次数,并得到如下结果: Group: A Name: Bob 等等。提前感谢。看来您最好选择: 使用一个或多个dict进行计数,例如: >>> fro

浏览具有此结构的组列表:

if group not in g:
    g[group] = set()
g[group].add(name)
并向集合中添加属于特定组的人员的姓名。集合中的名称是唯一的,我们不知道一个组中有多少相似的名称。因此,例如,如果有两个“Bob”名字或5个“Mike”名字,我如何计算这些名字的多次出现次数,并得到如下结果:

Group: A
Name: Bob

等等。提前感谢。

看来您最好选择:


使用一个或多个dict进行计数,例如:

>>> from collections import Counter
>>> mylist = ["Bob", "Mike", "Bob", "Mike", "Mike", "Mike", "Bob"]
>>> Counter(mylist)
Counter({'Mike': 4, 'Bob': 3})
这导致

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

从集合导入计数器,defaultdict

lst=[('B','Bob'),('A','Andy'),('C','Charles'),('A','Adam'),('B','Abraham')]

#假设人员可以出现在多个组中 def组(lst): 计数器=计数器(lst) 结果=默认dict(dict) 对于(组,名称),计数器中的值。iteritems() 结果[组][名称]=值 返回结果


在版本中,我在一个有6000万行的pandas数据帧上尝试了这一点,并行工作效果很好。@Trypy,我想你是反向的。计数器类在大于等于2.7的所有情况下都工作;我只是在Python3.7中使用了其中的一些方法,没有问题。
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}}

from collections import Counter, defaultdict

lst = [('B', 'Bob'), ('A', 'Andy'), ('C', 'Charles'), ('A', 'Adam'), ('B', 'Abraham')]

# assumes people can appear in more than one group def groups(lst): counter = Counter(lst) result = defaultdict(dict) for (group, name), value in counter.iteritems(): result[group][name] = value return result