python - 根据嵌套列表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)
帮我解决一些问题...
解决方案
这是一种使用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]]
推荐阅读
- haskell - 将函数应用于haskell列表中的第n个项目n次
- php - Laravel 迁移工作但没有做任何事情
- database - 当 db 在 diff (27020) 端口中创建时,无法从 robo3T 访问 mongodb 集合。(能够连接到 db 但不能连接到 coll)
- mysql - 有没有办法限制 IN 子句中每个元素的行数?
- c - 在 Windows 上使用 Cygwin64 编译器和调试器为 C 设置 VS Code(错误:无法开始调试)
- r - foreach %dopar% 到 sparklyr 中?
- javascript - 如何在打字稿中使用条件导入模块的类型?
- python - 如何在python中的if ... else语句中编写if else?
- r - 在 dplyr 中删除具有特定列值的行
- liquid - 如何在 Liquid 中执行重复的产品条件?