- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在解析一个 csv 文件以执行一些基本的数据处理。我正在使用的文件是一个网站的用户事件日志,格式如下:
User ID, Url, Number of Page Loads, Number of Interactions
User ID 和 Url 是字符串,Number of Page Loads 和 Number of Interactions 是整数。
我正在尝试确定哪个 url 具有最佳的交互页面比率。
我遇到困难的部分是获取唯一值并聚合列的结果。
我写了下面的代码:
import csv
from collections import defaultdict
fields = ["USER","URL","LOADS","ACT"]
file = csv.DictReader(open('file.csv', 'rU'), delimiter=",",fieldnames=fields)
file.next()
dict = defaultdict(int)
for i in dict:
dict[i['URL']] += int(i['LOADS'])
这很好用。它返回一个唯一 url 列表,其中包含字典中 url 的总加载次数 - { 'URL A' : 1000 , 'URL B' : 500}
问题是当我尝试向 url 键添加多个值时,我被难住了。
我已经尝试修改 for 循环以执行以下操作:
for i in dict:
dict[i['URL']] += int(i['LOADS']), int(i['ACT'])
并且我收到 TypeError: unsupported operand type(s) for +=: 'int' and 'tuple'
。为什么第二个值被认为是一个元组?
我尝试只添加 int(i[ACT])
,它运行良好。就在我同时尝试这两个值的时候。
我使用的是 python 2.6.7;关于如何执行此操作以及为什么将其视为元组的任何想法?
最佳答案
你最好使用 list
作为你的 defaultdict 容器:
import csv
from collections import defaultdict
d = defaultdict(list)
fields = ["USER","URL","LOADS","ACT"]
with open('file.csv', 'rU') as the_file:
rows = csv.DictReader(the_file, delimiter=",",fieldnames=fields)
rows.next()
for row in rows:
data = (int(row['LOADS']),int(row['ACT']))
d[row['URL']].append(data)
现在你有
d['someurl'] = [(5,17),(7,14)]
现在您可以做任何您想要的总和,例如,一个 URL 的所有 loads
:
load_sums = {k:sum(i[0] for i in d[k]) for k in d}
关于python - 难过 - 在 Python 中从字典列表中获取具有多个关联值的唯一键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14217392/
我正在解析一个 csv 文件以执行一些基本的数据处理。我正在使用的文件是一个网站的用户事件日志,格式如下: User ID, Url, Number of Page Loads, Number of
我是一名优秀的程序员,十分优秀!