如何在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}