![](/img/trans.png)
[英]howto to join "only" values of a an element of a dictionary of two elements in python list
[英]How to join a single element (consisting of two values) in a list with a seperator “:” in Python?
我有一个清单如下:
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"]
我必须找到每个航班的乘客人数,但我无法将 count 和 elem 与:
一起加入决赛名单。 我在下面给出了 function 和注释用于描述和 output 格式。
def find_passengers_per_flight():
'''Write the logic to find and return a list having number of passengers traveling per flight based on the details in the ticket_list
In the list, details should be provided in the format:
[flight_no:no_of_passengers, flight_no:no_of_passengers, etc.].'''
listairline=[]
count=0
finallist=[]
for i in ticket_list:
# listairline=[]
list2=i.split(":")
listairline.append(list2[0])
for elem in listairline:
count=listairline.count(elem)
if elem not in finallist:
finallist.append(elem,":",count) #here it is the line which needs to be modified. Kindly help
print (finallist)
使用collections.defaultdict
计算每个航班的票数:
from collections import defaultdict
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"]
flight_ticket_counts = defaultdict(int)
for ticket in ticket_list:
flight_no, *_ = ticket.split(":")
flight_ticket_counts[flight_no] += 1
print([f"{k}:{v}" for k, v in flight_ticket_counts.items()])
# ['AI567:2', 'AI077:4', 'BA896:1', 'SI267:3']
或使用collections.Counter
作为单线:
from collections import Counter
flight_ticket_counts = Counter(ticket.split(":")[0] for ticket in ticket_list)
print([f"{k}:{v}" for k, v in flight_ticket_counts.items()])
# ['AI567:2', 'AI077:4', 'BA896:1', 'SI267:3']
如果你想要乘客人数,那么你可以修改上面的方法来做到这一点:
flight_passenger_counts = defaultdict(int)
for flight in ticket_list:
flight_no, _, _, no_passengers = flight.split(":")
flight_passenger_counts[flight_no] += int(no_passengers)
print([f"{k}:{v}" for k, v in flight_passenger_counts.items()])
# ['AI567:29', 'AI077:217', 'BA896:67', 'SI267:439']
让我们用单线做到这一点:
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"]
[i+':'+str([i.split(':')[0] for i in ticket_list].count(i.split(':')[0])) for i in sorted(set([i.split(':')[0] for i in ticket_list])) ]
或者以更简单的方式:
res = [i.split(':')[0] for i in ticket_list]
res = [i+':'+str(res.count(i.split(':')[0])) for i in sorted(set(res)) ]
或者更快的方法:
from collections import Counter
res = Counter([i.split(':')[0] for i in ticket_list])
[i+':'+str(res[i]) for i in res]
以上所有给出:
['AI567:2', 'AI077:4', 'BA896:1', 'SI267:3']
对我来说,问题似乎是要求您将答案转换为字符串以获得与输入相同的格式。您只需将行更改为:
finallist.append(elem + ":" + str(count))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.