python3中具有多个或重复值的综合字典

时间:2018-09-15 16:10:12

标签: python-3.x dictionary functional-programming list-comprehension

我有一个包含元组对的详尽列表。它是这样的:

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)}

但是我不能在其自己的定义内调用字典。关于如何完成它的任何想法?重要的是要全面而不是循环执行。

1 个答案:

答案 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)。