问题确实比标题允许我指定的范围更广。 我有一个大文件,按照收到的顺序表示无序编号的数据包以及与之对应的时间戳,例如(为清楚起见,包括箭头,不是真正存在于文件中):
seq_1 ---->时间戳
seq_2 ---->时间戳
seq_3 ---->时间戳
seq_2 ---->时间戳
seq_5 ---->时间戳
seq_4 ---->时间戳
...
时间戳总是增加,但我可能会重复数据包,无序数据包等。我已经将文件解析为字符串列表,现在必须确定适当的数据结构来保存它,考虑到我需要:
我的想法是,我可以绘制(不是真的会这样做)图形条,x轴是序列号,y轴是时间戳。我需要手动查找局部最大值和最小值,因此我应该能够访问任何条目的相邻条目。
我想过将行列表解析为(sequence_number, timestamp)
list
,小心不要覆盖现有条目(条件1),然后source,最后turning it into a list
of tuple
s。 Traceback (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.解析的文件非常大,所以我想知道是否存在可以更好地扩展的解决方案(不需要在之间进行转换)两个数据结构+后验排序)。
答案 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')]