python 3:拆分信息和报告事件

python 3:拆分信息和报告事件,python,Python,比如说,我想计算bob访问sears和walmart的次数,我如何通过创建字典来做到这一点 information given: bob:oct1:sears bob:oct1:walmart mary:oct2:walmart don:oct2:sears bob:oct4:walmart mary:oct4:sears 好的,因为这可能是家庭作业,我会尝试给你一些关于如何做这件事的提示。如果这不是家庭作业,请这样说,我将恢复我的原始答案和示例代码 所以首先,你有你的数据集,每个条目都在一行

比如说,我想计算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
。然后,每个条目都有单独的内容

为了存储这些数据,我们首先要按名称对数据进行排序。因此,我们选择了一本以名字为关键字的词典,并将访问作为数据输入。因为我们不在乎日期,我们可以忘记它。相反,我们要计算给定名称的单个位置出现的频率。因此,我们要做的是保留另一个字典,使用位置作为键,访问计数作为数据。因此,我们最终得到了一个双字典,如下所示:

{
    'bob': {
        'sears': 1,
        'walmart': 1,
    },
    'mary': {
        ...
    }
}
因此,为了得到最终答案,我们只需查看字典,就可以立即读出值。

一个很好的解释,下面是相应的代码:

从命令行或stdin上提供的文件中读取输入,并以json格式转储事件: 输出 这种表示方式可以很容易地找出一个人的访问次数和访问地点

如果您始终知道名称和位置,则可以使用更简单的表示法:

visits = defaultdict(int)
for name, _, shop in csv.reader(fileinput.input(), delimiter=':'):
    visits[name,shop] += 1

print(visits['bob','walmart'])
# -> 2

如果这是家庭作业,请贴上这样的标签。家庭作业提示:CSV阅读器采用可选的分隔符参数,例如
delimiter=':'
。很抱歉,我没有指定它不是家庭作业,只是教科书中的练习。
{
  "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