【问题标题】:python listing and counting valuespython列出和计算值
【发布时间】:2012-10-10 19:43:43
【问题描述】:

在下面给出的示例数据(存储在文件中)中,我需要以最快的方式在每个“项目”类别中找到不同的“ID”。我可以通过遍历每一行然后找到所有项目集然后计数来做到这一点,但我正在寻找一种更快的方法,例如“Counter”或“itemgetter”。

“infile.txt”

id  item
444 Anemia
444 liver
444 Anemia
444 Anemia
222 liver
222 pancreas
222 liver
222 Anemia
444 pancreas
444 pancreas
444 Anemia
001 Iiver
001 pancreas
111 pancreas
111 liver
111 liver
111 pancreas
555 pancreas
555 liver
555 pancreas
555 liver
555 pancreas
555 liver

我需要类似下面的输出

item    count   ids
pancreas    5   001, 111, 222, 444, 555
liver   5   111,222,444,555,001
Anemia  2   222,444

【问题讨论】:

  • 不只是发布你的家庭作业,你能把你尝试过的东西发布一下吗?
  • 计数器不是你想要的;您正在收集所有唯一的 id,因此收集的 id 的长度也是您的计数。

标签: python iterator counter


【解决方案1】:

我会使用带有set 的默认字典

from collections import defaultdict
d = defaultdict(set)
with open(datafile) as f:
    for line in f:
        my_id,item = line.split()
        d[item].add(my_id)

for item in d:
    print item,len(d[item]),sorted(d[item])

【讨论】:

  • @MartijnPieters -- 谢谢。我想我修好了。无论如何,这个想法应该足够清楚......我使用ids 来避免遮蔽id——但这是一个糟糕的变量名,因为它暗示了不止一个。改为my_id
  • 谢谢。工作完美。我需要检查它在非常大的文件上的表现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
相关资源
最近更新 更多