首页 > 解决方案 > 根据嵌套列表python中的类别计算用户数

问题描述

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

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)

帮我解决一些问题...

标签: pythonpython-3.xlistdictionary

解决方案


这是一种使用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]]

推荐阅读