Skip to main content
 首页 » 编程设计

python之根据嵌套列表python中的类别计算用户

2025年05月04日13qlqwjy

我有一个包含两个子列表的列表。 这里看起来像这样

a = [['user1', 'referral'], ['user2', 'referral'], ['user1', 'referral'], ['user1', 'affiliate'], ['user7', 'affiliate'], ['user1', 'affiliate'], ['user9', 'affiliate'], ['user4', 'cpc'], ['user4', 'referral'], ['user2', 'referral'], ['user7', 'affiliate'], ['user14', 'cpc'], ['user3', 'orgainic'], ['user2', 'orgainic'], ['user4', 'cpc'], ['user2', 'cpc'], ['user8', 'cpc'], ['user2', 'orgainic']] 

我想根据类别计算用户(唯一)。

必需:

required = [['referral',3],['affiliate',3],['cpc',4],['orgainic',2]] 

我得到的输出:

{'referral': 3, 'affiliate': 2, 'cpc': 4, 'orgainic': 3} 

数错了。

这是我试过的代码:

a = [['user1', 'referral'], ['user2', 'referral'], ['user1', 'referral'], ['user1', 'affiliate'], ['user7', 'affiliate'], ['user1', 'affiliate'], ['user9', 'affiliate'], ['user4', 'cpc'], ['user4', 'referral'], ['user2', 'referral'], ['user7', 'affiliate'], ['user14', 'cpc'], ['user3', 'orgainic'], ['user2', 'orgainic'], ['user4', 'cpc'], ['user2', 'cpc'], ['user8', 'cpc'], ['user2', 'orgainic']] 
 
required = [['referral',3],['affiliate',3],['cpc',4],['orgainic',2]] 
 
c = {} 
visits = [] 
for i in a: 
    # print(i) 
    for j in i[1:]: 
        if j not in c and i[0] not in visits: 
            c[j] = 1 
            visits.append(i[0]) 
        elif j in c and i[0] not in visits: 
            c[j] = c[j]+1 
print(c) 

帮我解决一些问题...

请您参考如下方法:

这是一种使用 collections.defaultdict 的方法。

例如:

from collections import defaultdict 
 
a = [['user1', 'referral'], ['user2', 'referral'], ['user1', 'referral'], ['user1', 'affiliate'], ['user7', 'affiliate'], ['user1', 'affiliate'], ['user9', 'affiliate'], ['user4', 'cpc'], ['user4', 'referral'], ['user2', 'referral'], ['user7', 'affiliate'], ['user14', 'cpc'], ['user3', 'orgainic'], ['user2', 'orgainic'], ['user4', 'cpc'], ['user2', 'cpc'], ['user8', 'cpc'], ['user2', 'orgainic']] 
result = defaultdict(int) 
seen = set() 
for k, v in a: 
    key = "{}_{}".format(k, v) 
    if key not in seen: 
        result[v] += 1 
        seen.add(key) 
print(list(map(list, result.items()))) 

输出:

[['referral', 3], ['affiliate', 3], ['cpc', 4], ['orgainic', 2]]