假设我有一个(文本)文件,其结构如下(name,score):
a 0
a 1
b 0
c 0
d 3
b 2
等等。我的目标是把每个名字的分数相加,然后从最高分数到最低分数排序。因此,在本例中,我需要以下输出:
^{pr2}$
事先我不知道档案里会有什么名字。在
我想知道有没有一种有效的方法可以做到这一点。我的文本文件最多可以包含50000个条目。在
我唯一能想到的方法就是从第1行开始,记住那个名字,然后检查整个文件,寻找那个名字和总和。这看起来效率非常低,所以我想知道是否有更好的方法来实现这一点。在
Tags:
熊猫很容易做到这一点:
将所有数据读入字典:
以及排序:
^{pr2}$印刷品:
性能
为了检查这个答案与来自@SvenMarnach的答案的性能,我将这两种方法都放入了一个函数中。这里
fobj
是一个打开供读取的文件。 我使用io.StringIO
所以IO延迟应该,希望不是测量的:collections.Counter
的结果:collections.defaultdict
的结果:看起来
defaultdict
快了四倍。我不会猜到的。但说到绩效,你需要衡量。在这是
collections.Counter
的一个很好的用例:相关问题 更多 >
编程相关推荐