Преобразовать словарь в список, в котором значения суммируются для любого повторяющегося ключа

Вы можете использовать reduce, если исходный массив не должен изменяться.

const arrayA = [
  {
    type: 'card',
    id: 1
  },
  {
    type: 'card',
    id: 2
  },
  {
    type: 'card',
    id: 3
  },
  {
    type: 'card',
    id: 4
  },
  {
    type: 'card',
    id: 5
  },
];

const arrayB = [
  {
    type: 'pro-tip',
    id: 10
  },
  {
    type: 'pro-tip',
    id: 11
  },
];

const res = arrayA.reduce((acc, a, i) => {
  const b = arrayB[(i + 1) / 2 - 1];
  return [...acc, a, ...(b ? [b] : [])];
}, []);

console.log(res);

0
задан Tomothy32 19 January 2019 в 03:25
поделиться

1 ответ

Вы можете сделать это в одну строку следующим образом:

from itertools import compress  
d2 = dict((k, sum(compress(d1['vals'], (x == k for x in d1['inds'])))) for k in set(d1['inds']))

Однако, это не так уж интуитивно понятно. Я надеюсь, что кто-то придумает лучший ответ :)

0
ответ дан noidsirius 19 January 2019 в 03:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: