<p>使用<a href="https://docs.python.org/3/library/collections.html#collections.defaultdict" rel="nofollow noreferrer">collections.defaultdict</a></p>
<pre><code>from collections import defaultdict
file_name='text.pp'
shot_no = defaultdict(list)
with open(file_name , 'r') as f:
for line in f:
if line.strip():
if line.startswith('S'):
key = line[21:25]
elif line.startswith('R'):
shot_no[key].extend([line[23:26], line[49:54], line[75:80]])
print(shot_no)
</code></pre>
<p>输出</p>
<pre><code>defaultdict(<class 'list'>, {'2563': ['10.', '11.10', '11.21', '11.', '11.30', '11.31', '11.', '11.40', '11.51'], '2558': ['10.', '11.00', '11.01', '11.', '11.10', '11.11', '11.', '11.20', '11.31']})
</code></pre>
<p>我认为您需要修复索引,它们不是您显示为输出的内容。我也不知道你想转换成浮点还是十进制。你知道吗</p>
<p>如果要保留插入顺序-可能需要使用OrderedDict,然后调整添加值的部分。你知道吗</p>
<p>使用<a href="https://docs.python.org/3/library/collections.html#collections.OrderedDict" rel="nofollow noreferrer">collections.OrderedDict</a></p>
<pre><code>from collections import OrderedDict
file_name='text.pp'
shot_no = OrderedDict()
with open(file_name , 'r') as f:
for line in f:
if line.strip():
if line.startswith('S'):
key = line[21:25]
elif line.startswith('R'):
shot_no.setdefault(key, []).extend([line[23:26], line[49:54], line[75:80]])
print(shot_no)
</code></pre>
<p>输出</p>
<pre><code>OrderedDict([('2558', ['10.', '11.00', '11.01', '11.', '11.10', '11.11', '11.', '11.20', '11.31']), ('2563', ['10.', '11.10', '11.21', '11.', '11.30', '11.31', '11.', '11.40', '11.51'])])
</code></pre>
<p>编辑:在python3.7+中,常规dict也可以,因为根据文档“dict对象的插入顺序保存性质已经声明为Python语言规范的一个正式部分”。在3.6中,此功能被视为实现细节,不应依赖。因此,在3.7之前,必须使用OrderedDict。你知道吗</p>