我有一个包含元组对的详尽列表。它是这样的:
travels =[(passenger_1, destination_1), (passenger_2, destination_2),(passenger_1, destination_2)...]
以此类推。旅客和目的地可能会重复,甚至同一旅客目的地元组也可能会重复。 我想做出一个全面的决定,将每位旅客作为关键并重视其最经常出现的目的地。
我的第一次尝试是这样:
dictionary = {k:v for k,v in travels}
,但每个键都会覆盖最后一个。我希望为每个键获取多个值,这样我就可以为每个键计数。然后我尝试这样:
dictionary = {k:v for k,v in travels if k not in dictionary else dictionary[k].append(v)}
但是我不能在其自己的定义内调用字典。关于如何完成它的任何想法?重要的是要全面而不是循环执行。
答案 0 :(得分:0)
这可以通过for循环来完成:
result = dict()
for passenger, destination in travels:
result.setdefault(passenger, list()).append(destination)
result
是单个字典,其中键是乘客,值是带有目的地的列表。
我怀疑您是否可以使用单个字典解释表达式执行相同的操作,因为在理解中您只能生成元素,而不能自由修改它们。
编辑。
如果您想要(或必须)使用理解表达式,则可以执行以下操作(2个理解并且没有显式循环):
result = {
passenger: [destination_
for passenger_, destination_
in travels
if passenger_ == passenger]
for passenger, dummy_destination
in travels}
这是获取所需内容的较差算法。它的效率为O(n ^ 2),而第一种方法的效率为O(n)。