【问题标题】:How to loop list and sum particular items in python如何在python中循环列表和总结特定项目
【发布时间】:2022-01-23 12:49:06
【问题描述】:

我想向更高级的python程序员寻求建议。我有一个信息清单

stream = [
    '2018-01-01,user1,3',
    '2018-01-07,user1,4',
    '2018-03-29,user1,1',
    '2018-04-04,user1,13',
    '2018-01-05,user2,7',
    '2018-06-14,user3,4',
    '2018-07-02,user3,10',
    '2018-03-21,user4,19',
    '2018-03-22,user4,4',
    '2018-04-22,user4,8',
    '2018-05-03,user4,9',
    '2018-05-11,user4,11',
]

我需要得到这样的结果

total_logs_by_user = user1 : 21
                     user2 : 7
                     user3 : 14
                     user4 : 51

到目前为止我已经做的是这样的:

datas = []
for data in stream:
    print(data[:11])
    datas.append(data[11:])

print(datas)
    ['user1,3',
     'user1,4',
     'user1,1',
     'user1,13',
     'user2,7',
     'user3,4',
     'user3,10',
     'user4,19',
     'user4,4',
     'user4,8',
     'user4,9',
     'user4,11'] 

然后我将 userslogs 数量分开:

users = []
logs = []
for a in datas:
    #print(a[:5])
    users.append(a[:5])
    logs.append(a[6:])

现在,当我尝试zip(users, logs) 时,我没有得到正确的结果。无论如何,我的目标是汇总每个用户的日志。欣赏所有可能的解决方案。

【问题讨论】:

  • 你得到什么不正确的结果?你怎么拉拉链?您提供了一堆背景信息,但忽略了实际相关的内容。
  • streams 对象是否偶然来自.csv 文件?这是相同的格式,如果是这样,有更好的方法去做你想做的事情,如果它是/是的话。

标签: python python-3.x list dictionary


【解决方案1】:

您需要小心处理输入数据的方式。如果用户名发生变化(就其长度而言),使用固定偏移量将会中断。但是,由于它们似乎是逗号分隔的,您可以这样做:

from collections import defaultdict

stream = [
    '2018-01-01,user1,3',
    '2018-01-07,user1,4',
    '2018-03-29,user1,1',
    '2018-04-04,user1,13',
    '2018-01-05,user2,7',
    '2018-06-14,user3,4',
    '2018-07-02,user3,10',
    '2018-03-21,user4,19',
    '2018-03-22,user4,4',
    '2018-04-22,user4,8',
    '2018-05-03,user4,9',
    '2018-05-11,user4,11',
]

D = defaultdict(lambda: 0)

for e in stream:
    t = e.split(',')
    D[t[1]] += int(t[2])

for k, v in D.items():
    print(f'{k} : {v}')

输出:

user1 : 21
user2 : 7
user3 : 14
user4 : 51

【讨论】:

猜你喜欢
  • 2021-05-25
  • 2014-09-30
  • 2019-04-14
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多