<p>如果你真的想汇总航班号,你可以直接从原始数据中创建元组,并将它们汇总成dict:(使用defaultdict更好)</p>
<pre><code>t = ['AI077:077', 'AI077:077', 'AI077:077', 'AI077:077', 'AI567:567',
'AI567:567', 'BA896:896', 'SI267:267', 'SI267:267', 'SI267:267']
trimmed = [(y[0:5],int(y[6:])) for y in t]
summs = {}
for flight,price in trimmed:
summs.setdefault(flight,0)
summs[flight] += price
print(summs)
</code></pre>
<p>输出:</p>
<pre><code>{'BA896': 896, 'SI267': 801, 'AI077': 308, 'AI567': 1134}
</code></pre>
<hr/>
<p><strong>不过,我觉得有点奇怪的是,你似乎用了航班名称中的航班号来计算乘客人数——你不应该计算每个航班售出的机票吗?</strong></p>
<hr/>
<p>点票:</p>
<pre><code> #flight : from : to : seat-number
ticket_list= ["AI567:MUM:LON:014", "AI077:MUM:LON:056", "BA896:MUM:LON:067",
"SI267:MUM:SIN:145", "AI077:MUM:CAN:060", "SI267:BLR:MUM:148",
"AI567:CHE:SIN:015", "AI077:MUM:SIN:050", "AI077:MUM:LON:051",
"SI267:MUM:SIN:146"]
from collections import Counter
c = Counter ((t.split(":")[0] for t in ticket_list))
print(c)
</code></pre>
<p>输出:</p>
<pre><code># sold tickets per flight
Counter({'AI077': 4, 'SI267': 3, 'AI567': 2, 'BA896': 1})
</code></pre>
<hr/>
<p>您还可以使用排序列表中的<a href="https://docs.python.org/3/library/itertools.html#itertools.groupby" rel="nofollow noreferrer">groupby from itertools</a>对您的航班进行分组,并对其进行评估,如下所示:</p>
<pre><code>from itertools import groupby
# if you need the tickets as well:
grp = groupby(sorted(ticket_list), lambda x:x[:6])
for g in grp:
key, seats = g
seats = list(seats)
print(f"Flight: {key} has sold seats {len(seats)}: {','.join( x.split(':')[-1] for x in seats)}")
Flight: AI077: has sold seats 4: 060,051,056,050
Flight: AI567: has sold seats 2: 015,014
Flight: BA896: has sold seats 1: 067
Flight: SI267: has sold seats 3: 148,145,146
</code></pre>