Я понял ответ на этот вопрос, используя FunctionTransformer , вдохновленный решением @Marcus V на этот вопрос . Пересмотренный трубопровод намного более краткий.
from sklearn.preprocessing import FunctionTransformer
get_numeric_data = FunctionTransformer(lambda x: x[['t1_prob', 't2_prob', 't3_prob', 't4_prob', 't5_prob']], validate=False)
pipeline = Pipeline([
('features', FeatureUnion([
('numeric_features', Pipeline([
('selector', get_numeric_data)
])),
('word_features', Pipeline([
('vect', CountVectorizer(analyzer="word", stop_words='english')),
('tfidf', TfidfTransformer(use_idf = True)),
])),
])),
('clf', OneVsRestClassifier(svm.LinearSVC(random_state=random_state)))
])
уменьшить ваш друг
const list = [ { JavaScript: 41837, Batchfile: 47 },
{ 'C#': 7484 },
{ Batchfile: 110 },
{ Scala: 50597 },
{ Java: 18180 },
{ Java: 55689 } ];
const summed = list.reduce((totals, obj) => {
Object.keys(obj).forEach(k => {
const cur = totals[k] || 0;
totals[k] = cur + obj[k];
});
return totals;
}, {});
console.log(summed);
Сделайте новый объект. Итерация по каждому объекту во входном массиве. Для каждого объекта итерируйте ключи этого объекта. Если они существуют в вашем новом объекте, добавьте значение, в противном случае добавьте ключ и значение в новый объект;
var arr = [ { JavaScript: 41837, Batchfile: 47 },
{ 'C#': 7484 },
{ Batchfile: 110 },
{ Scala: 50597 },
{ Java: 18180 },
{ Java: 55689 } ]
var result = {}
arr.forEach(function(group){
Object.keys(group).forEach(function(key){
if(result[key]) {
result[key] += group[key];
} else {
result[key] = group[key];
}
})
});
console.log(result);
Уменьшение массива в сочетании с For in для циклического перебора ключей объектов в них получит то, что вы хотите.
a = [ { JavaScript: 41837, Batchfile: 47 },
{ 'C#': 7484 },
{ Batchfile: 110 },
{ Scala: 50597 },
{ Java: 18180 },
{ Java: 55689 } ]
result = {}
b = a.reduce((result, item) => {
for (let eachKey in item) {
const curSum = result[eachKey] || 0;;
result[eachKey] = curSum + item[eachKey];
}
return result;
}, result)