用于表示条形图的数据结构

时间:2015-10-30 18:57:44

标签: python data-structures

问题确实比标题允许我指定的范围更广。 我有一个大文件,按照收到的顺序表示无序编号的数据包以及与之对应的时间戳,例如(为清楚起见,包括箭头,不是真正存在于文件中):

  

seq_1 ---->时间戳

     

seq_2 ---->时间戳

     

seq_3 ---->时间戳

     

seq_2 ---->时间戳

     

seq_5 ---->时间戳

     

seq_4 ---->时间戳

     

...

时间戳总是增加,但我可能会重复数据包,无序数据包等。我已经将文件解析为字符串列表,现在必须确定适当的数据结构来保存它,考虑到我需要:

  1. 删除所有重复的序列号,只保留第一个到达的序号。
  2. 获取按序列号排序的有序可迭代结构。
  3. 我的想法是,我可以绘制(不是真的会这样做)图形条,x轴是序列号,y轴是时间戳。我需要手动查找局部最大值和最小值,因此我应该能够访问任何条目的相邻条目。

    我想过将行列表解析为(sequence_number, timestamp) list,小心不要覆盖现有条目(条件1),然后source,最后turning it into a list of tuplesTraceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/2.7/bin/behave", line 7, in <module> from behave.__main__ import main ImportError: No module named behave.__main__ 应该允许我访问相邻的条目,从而满足条件2.解析的文件非常大,所以我想知道是否存在可以更好地扩展的解决方案(不需要在之间进行转换)两个数据结构+后验排序)。

1 个答案:

答案 0 :(得分:1)

最简单的方法是将内容转储到字典中并在最后对密钥进行排序。 d.get调用可确保它保留第一个遇到的值(如果存在),或者如果不存在则插入新值。

In [23]: s = """seq_1 ----> timestamp1
   ....: seq_2 ----> timestamp2
   ....: seq_3 ----> timestamp3
   ....: seq_2 ----> timestamp4
   ....: seq_5 ----> timestamp5
   ....: seq_4 ----> timestamp6
   ....: seq_9 ----> timestamp7
   ....: seq_10 ----> timestamp8
   ....: seq_6 ----> timestamp9
   ....: seq_7 ----> timestamp10
   ....: seq_2 ----> timestamp11
   ....: seq_4 ----> timestamp12"""

In [24]: d = {}

In [25]: for line in s.split("\n"):
    seq, ts = map(str.strip, line.split("---->"))
    d[seq] = d.get(seq, ts)
   ....:

In [26]: sorted(d.items(), key=lambda x: int(x[0][4:]))
Out[26]:
[('seq_1', 'timestamp1'),
 ('seq_2', 'timestamp2'),
 ('seq_3', 'timestamp3'),
 ('seq_4', 'timestamp6'),
 ('seq_5', 'timestamp5'),
 ('seq_6', 'timestamp9'),
 ('seq_7', 'timestamp10'),
 ('seq_9', 'timestamp7'),
 ('seq_10', 'timestamp8')]