gpt4 book ai didi

python - 难过 - 在 Python 中从字典列表中获取具有多个关联值的唯一键

转载 作者:行者123 更新时间:2023-11-28 22:58:00 27 4
gpt4 key购买 nike

我正在解析一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com