首页 > 解决方案 > 计算列表中出现的次数[元组]

问题描述

输入:[('Vehicle=Boat', 'Tom'), ('Vehicle=Car', 'Scott'), ('Vehicle=Car', 'Tom'), ('Vehicle=Boat', 'Tom')]

使用以下代码,我可以正确地对输入进行分组,但计算元组中的出现次数会给我带来问题:

def groupBy(seqs, idx=1): 
    
    d = dict()
    for seq in seqs:
        k = seq[idx]
        v = d.get(k,tuple()) + (seq[:idx]+seq[idx+1:]) #new dict here where mydict[i] = count.get(i,0) + 1?
        d.update({k:v})
    return d

回报:

{'Tom': ('Vehicle=Boat', 'Vehicle=Car', 'Vehicle=Boat'), 'Scott': ('Vehicle=Car')}

这很棒,但我希望输出是:

Tom  
Vehicle=Boat: 2  
Vehicle=Car: 1  

Scott 
Vehicle=Car: 1

有人可以指出我正确的方向吗?

标签: pythondictionarytuples

解决方案


您只需用手将其碾碎:

data = [('Vehicle=Boat', 'Tom'), ('Vehicle=Car', 'Scott'), ('Vehicle=Car', 'Tom'), ('Vehicle=Boat', 'Tom')]

def groupBy(seqs, idx=0): 
    d = {}
    for seq in seqs:
        k = seq[idx]
        if k not in d:
            d[k] = {}
        rest = seq[:idx] + seq[idx+1:]
        if rest not in d[k]:
            d[k][rest] = 0
        d[k][rest] += 1
    return d

print( groupBy( data, 1 ) )

输出:

{'Tom': {('Vehicle=Boat',): 2, ('Vehicle=Car',): 1}, 'Scott': {('Vehicle=Car',): 1}}

推荐阅读