Python中

时间:2016-10-05 10:15:40

标签: python python-3.x collections

我手头的任务是解析一个大文本(几个100K行)文件并累积一些基于统计数据的统计数据。每行包含一些先前分析的结果。

我写了一个自定义类来定义要累积的对象。该类包含2个字符串字段,3个集和2个整数计数器。因此,有__init__(self, name)初始化具有名称和空字段的新对象,以及一个名为addRow()的方法,该方法将信息添加到对象中。这些集合累积与该对象相关联的数据,并且计数器跟踪几个条件。

我最初的想法是迭代文件的行并在parseRow()

中调用类似main的方法
reader = csv.reader(f)
acc = {} # or set()
for row in reader: 
  parseRow(row,acc)

看起来像是:

parseRow(row, acc):
  if row[id] is not in acc: # row[id] is the column where the object names/ids are 
    a = MyObj(row[id])
  else:
    a = acc.get(row[id]) # or equivalent
  a.addRow(...)

这里的问题是累积集合acc不能是set,因为集合在Python中显然不可索引。 编辑以澄清, indexable 我并不是指获取第n个元素,而是能够检索特定元素

一种解决方法是让dict具有{obj_name : obj}映射,但这感觉就像一个丑陋的解决方案。考虑到语言的优雅,我想有更好的解决方案。这肯定不是特别罕见的情况......

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

你也可以试试ordered-set。这是一套AND订购。