如何在Python中采用多个字典的线性组合?

如何在Python中采用多个字典的线性组合?,python,Python,下面是两个字典的线性组合的一些代码: def linearcombination(a1,d1,a2,d2): return {k:a1*d1.get(k,0)+a2*d2.get(k,0) for k in {**d1,**d2}.keys()} choosy1={"a":1,"b":2,"c":3} choosy2={"a":1,"d":1} choosy=linearcombination(1,choosy1,10,choosy2) 挑剔是: {'a': 11, 'c': 3,

下面是两个字典的线性组合的一些代码:

def linearcombination(a1,d1,a2,d2):
    return {k:a1*d1.get(k,0)+a2*d2.get(k,0) for k in {**d1,**d2}.keys()}


choosy1={"a":1,"b":2,"c":3}
choosy2={"a":1,"d":1}
choosy=linearcombination(1,choosy1,10,choosy2)
挑剔是:

{'a': 11, 'c': 3, 'd': 10, 'b': 2}

如何将其推广到允许任意数量字典的线性组合?

在一组键的dict理解中使用
sum
解决方案:

来自itertools导入链的

定义DICT的线性组合(DICT、权重):
返回{
k:sum(w*d.get(k,0)表示d,w在zip中(dicts,weights))
对于集合中的k(链自可数(dicts))
}
例如:

dicts=[{'a':1,'b':2,'c':3},{'a':1,'d':1}] >>>权重=[1,10] >>>数字的线性组合(数字、权重) {'c':3,'d':10,'a':11,'b':2}
以下是一种使用
pandas
处理dict键对齐的方法:

def lc(coeffs, dicts):
    return (pd.concat(pd.Series(d).fillna(0)*a for a,d in zip(coeffs,dicts))
              .sum(level=0)
              .to_dict()
           )

lc([1,10], [choosy1, choosy2])
# {'a': 11, 'b': 2, 'c': 3, 'd': 10}