【问题标题】:Applying a function to every possible combination of 2 keys in a dictionary将函数应用于字典中 2 个键的每个可能组合
【发布时间】:2020-06-19 07:16:43
【问题描述】:

我有一个非常大的字典,其中有一个单词作为键,一个向量作为值,就像这样

groceries = {'apples': array([1,2,1],dtype=float32),
             'bananas': array([1,3,4],dtype=float32),
             'potatoes': array([1,4,4],dtype=float32)}

每个向量都代表杂货店经理的得分。我想为 2 个键的每个可能组合找到分数。在这种情况下,“apples+bananas”得分,“bananas+potatoes”得分,“apples+potatoes”得分。

所以,我需要计算每个键值与所有其他键值的所有可能总和。 我有一个需要 2 个变量的函数:

def summing(u, v):
    return u+v

这个函数接受变量并对它们的值求和,所以'apples+bananas'的总和应该是[2,5,5]

什么是可扩展的方法? 我正在尝试使用 itertools,但我之前没有使用过它,它变得非常混乱。

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    你可以这样做:

    sums = {key_combo: sum(groceries[k] for k in key_combo) for key_combo in itertools.combinations(groceries, 2)}
    

    解释:itertools.combinations 创建所有组合。字典理解对每个组合的值求和,并将结果分配给以组合为键的字典。结果是:

    
    sums
    {('apples', 'bananas'): array([2., 5., 5.], dtype=float32),
     ('apples', 'potatoes'): array([2., 6., 5.], dtype=float32),
     ('bananas', 'potatoes'): array([2., 7., 8.], dtype=float32)}
    

    函数summing 并不是必需的,因为numpy 数组非常清楚如何对自己求和。

    【讨论】:

    • 非常感谢,成功了! :) 我仍然更喜欢使用函数,因为我可能需要使用其他操作,例如计算向量的余弦,或者对相同的数据进行除法
    • 您可以在dict理解中调用您的函数,如下所示:sums = {key_combo: summing(groceries[key_combo[0]], groceries[key_combo[1]]) for key_combo in itertools.combinations(groceries, 2)}
    猜你喜欢
    • 2012-03-07
    • 2019-03-01
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多