这是原始列表:
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"]
我正在尝试从中生成一个子列表,如下所示:
['AI077:077', 'AI077:077', 'AI077:077', 'AI077:077', 'AI567:567', 'AI567:567', 'BA896:896', 'SI267:267', 'SI267:267', 'SI267:267']
我已经成功 生成了列表,现在我正在尝试根据 **":" 之后的值计算排序列表的总和 **每个航类_no
预期输出:
[AI077:308, AI567:1134, BA896:896, SI267:801]
我的代码:
def find_passengers_per_flight():
flight_name=[]
flight_passenger=[]
"""
In the list, details should be provided in the format:
[flight_no:no_of_passengers, flight_no:no_of_passengers, etc.]."""
for t in ticket_list:
res=''
res = re.search(r"[A-Z]*\d*|[a-z]*\d*",t).group()
flight_name.append(res)
for i in flight_name:
new_str=''
res2 = re.search(r"\d+",i).group()
new_str+=':'+res2
flight_passenger.append(i+new_str)
print(sorted(flight_passenger))
我的输出:
['AI077:077', 'AI077:077', 'AI077:077', 'AI077:077', 'AI567:567', 'AI567:567', 'BA896:896', 'SI267:267', 'SI267:267', 'SI267:267']
最佳答案
使用 defaultdict
会更容易,如果您坚持将输出作为列表稍后转换它:
from collections import defaultdict
l = ['AI077:077', 'AI077:077', 'AI077:077', 'AI077:077', 'AI567:567', 'AI567:567', 'BA896:896', 'SI267:267', 'SI267:267', 'SI267:267']
d = defaultdict(int)
for e in l:
name, number = e.split(':')
number = int(number)
d[name] += number
print(d)
# defaultdict(<class 'int'>, {'AI077': 308, 'AI567': 1134, 'BA896': 896, 'SI267': 801})
print(['{}:{}'.format(k, v) for k, v in d.items()])
# ['AI077:308', 'AI567:1134', 'BA896:896', 'SI267:801']
如果您使用的是 <= 3.6 的 Python,则不能保证输出总是以相同的顺序进行,我认为这无关紧要。
关于python - 我正在尝试计算字母数字列表的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53770975/