Python 3:拆分信息并报告事件



举个例子,我想计算bob访问sears和walmart的次数我该如何创建字典呢?

information given:
bob:oct1:sears
bob:oct1:walmart
mary:oct2:walmart
don:oct2:sears
bob:oct4:walmart
mary:oct4:sears

好了,因为这可能是作业,所以我会给你们一些提示。如果这不是家庭作业,请这样说,我将恢复我原来的答案和示例代码。

首先,你有你的数据集,每个条目都在单行中。由于我们希望单独处理每个数据条目,因此必须将原始数据拆分为每一行。我们可以用str.split

每个条目都以简单格式name:date:location构造。为了得到每一个片段,我们可以再次使用str.split。然后,我们最终为每个条目分离了内容。

为了存储它,我们首先要按名称对数据进行排序。所以我们选择了一个以人名为键,以访问量为数据的字典。由于我们不关心日期,我们可以忘记它。相反,我们想要计算给定名称的单个位置出现的频率。我们要做的是,保留另一个字典使用位置作为键访问次数作为数据。所以我们最终得到了一个double字典,看起来像这样:
{
    'bob': {
        'sears': 1,
        'walmart': 1,
    },
    'mary': {
        ...
    }
}

因此,为了得到最终的答案,我们只需查看该字典并立即读取值。

@poke给出了一个很好的解释,下面是相应的代码:

从命令行或stdin提供的文件中读取输入,并以json格式转储出现的次数:

#!/usr/bin/env python
import csv
import fileinput
import json
import sys
from collections import defaultdict
visits = defaultdict(lambda: defaultdict(int))
for name, _, shop in csv.reader(fileinput.input(), delimiter=':'): 
    visits[name][shop] += 1
# pretty print
json.dump(visits, sys.stdout, indent=2)

输出
{
  "bob": {
    "sears": 1, 
    "walmart": 2
  }, 
  "don": {
    "sears": 1
  }, 
  "mary": {
    "sears": 1, 
    "walmart": 1
  }
}

这种表示可以很容易地发现一个人访问了多少次以及访问了哪里。

如果你总是知道名字和位置,那么你可以使用更简单的表示:

visits = defaultdict(int)
for name, _, shop in csv.reader(fileinput.input(), delimiter=':'):
    visits[name,shop] += 1
print(visits['bob','walmart'])
# -> 2

相关内容

  • 没有找到相关文章

最新更新