Python3.6使用defaultdict和Coun

2024-06-09 09:18:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我才刚刚开始学习Python,作为学习计划的一部分,我有一个任务要完成,这让我很困惑。是的,我已经在这里,youtube和其他地方搜索过这篇文章的s*%t,但我似乎无法从我目前所学的知识中找到答案。我需要使用python 3.6中的“defaultdict”和“Counter”从网站学习控制台提供的逗号分隔的CSV文件中计算最频繁的交易及其交易量,该文件如下所示:

GOOG,100,900.10
MSFT,50,68.99
AAPL,100,152.92
IBM,5,151.95
GOOG,150,901.25
AAPL,50,152.25
TEAM,100,36.91
NVDA,75,117.88
INTC,200,36.24
IBM,10,151.91
AAPL,700,152.15
GOOG,100,900.99
GOOG,50,900.12

我用最频繁的交易量来计算所有交易量,如下所示:

^{pr2}$

一旦我添加了我需要的代码,它应该打印出来:

^{3}$

我只是不太明白如何使用代码中的方法导入,然后如何获得正确的打印输出。我所能做的就是把每一个股票按顺序打印出来。从一个列表中计算任何东西,比如股票名称和它们出现的次数都可以,但是现在我有了需要计算的额外数据,而且在教程中也不清楚是如何计算的。例如,本教程给了我这样的解释:

from collections import defaultdict

volumes = defaultdict(int)
for trade in [100, 200, 300]:
    volumes['MSFT'] += trade # works every time

print('Total for MSFT:', volumes['MSFT'])

提前感谢你的帮助,如果我还不完全清楚的话,我很抱歉。在

~韦纳姆


Tags: 文件代码foryoutube地方教程ibm计划
2条回答

很明显,我来错地方了,有两个原因:因为没有对我的问题进行适当的研究而被标记为-2,这很简单!正如问题中所述,我需要以一种特定的方式来解决这个问题,甚至连python文档都没有清楚地解释如何处理这个问题。如您所知,它解释了defaultdict的功能和Counter的功能。它没有解释的是数据导入后的样子以及之后如何操作它,这是迄今为止没有解释过的。对某些人来说可能很简单,但对我来说却不是,这就是为什么我要去看youtube视频。我的第二个理由是,两个“提示”说我应该使用defaultdict(Counter)…这到底是什么意思??还有一些回答说,如果我看Youtube视频(是的,dah),并且以不同的方式完成任务,我就不会成为程序员(是的,dah,可以用另一种不使用defaultdict的方法来完成这项任务。例如,使用熊猫和/或纽比)。在

我尝试过的方法包括:

初始化“for line in src”部分下面的defaultdict和counter:

for line in src:
    inst, vol, price = line.split(',')
    trades = defaultdict(int)
    c = Counter()

所做的只是将所有数据以相当小的行形式输出,而不查找最常见的数据并将其相加。在

提供给我的材料包括以下内容:这里有3个数字,这是一个列表,这将它们加在一起;这是defaultdict所做的;这是Counter所做的等等。它只是5个小页的指令和一些代码片段作为示例,然后是上面的任务。在

是的,我是新来的,而且,是的,我很沮丧。在

这不包括文件处理、函数定义或漂亮的打印,但它应该说明(至少)他们希望您应用这些概念的方式。另外,如果你要找的是总价,除非我遗漏了一些东西,你应该把交易量乘以交易价格。在

from collections import defaultdict, Counter


counts = defaultdict(Counter)

lines = """GOOG,100,900.10
MSFT,50,68.99
AAPL,100,152.92
IBM,5,151.95
GOOG,150,901.25
AAPL,50,152.25
TEAM,100,36.91
NVDA,75,117.88
INTC,200,36.24
IBM,10,151.91
AAPL,700,152.15
GOOG,100,900.99
GOOG,50,900.12""".split("\n")

for line in lines:
    symbol, volume, price = line.split(",")
    counts[symbol]["frequency"] += 1
    counts[symbol]["volume"] += int(volume)
    counts[symbol]["price"] += float(price) * counts[symbol]["volume"]

for symbol in sorted(counts, key=lambda s: counts[s]["frequency"], reverse=True)[:5]:
    print(symbol, counts[symbol])

{{cd2>将返回一个相同的

我以前从没用过Counter。有点奇怪,坐在核心库里。在

相关问题 更多 >