Я пытаюсь объединить произвольно длинный список словарей в один словарь, где совпадающие ключи будут объединять различные значения, а новые ключи просто вставляются. Есть ли способ сделать это с помощью uj?
dd1:(`a`b`c)!(1 2; 3 4; 5 6);
dd2:(`b`c`d)!(7 8; 9 10; 0 1);
dd3:(`a`f`e)!(3 4; 1 1; 2 2);
(uj)/:(dd1;dd2;dd3) just returns the last dict.
Я хочу:
(`a`b`c`d`e`f)!(1 2 3 4; 3 4 7 8; 5 6 9 10; 0 1; 2 2; 1 1)
Один метод не использую uj
q)(,'/)(dd1;dd2;dd3)
a| 1 2 3 4
b| 3 4 7 8
c| 5 6 9 10
d| 0 1
f| 1 1
e| 2 2
Если порядок ключей важен
q)`a`b`c`d`e xcols(,'/)(dd1;dd2;dd3)
a| 1 2 3 4
b| 3 4 7 8
c| 5 6 9 10
d| 0 1
e| 2 2
f| 1 1
Чтобы гарантировать, что принимаются только разные значения
q)distinct each(,'/)(dd1;dd2;dd3)
a| 1 2 3 4
b| 3 4 7 8
c| 5 6 9 10
d| 0 1
f| ,1
e| ,2
Отредактировал свой ответ
q)(,'/)(dd1;dd2;dd3)
a| 1 2 3 4
b| 3 4 7 8
c| 5 6 9 10
d| 0 1
f| 1 1
e| 2 2
Ваш ответ можно улучшить, добавив дополнительную вспомогательную информацию. Пожалуйста, отредактируйте , добавив дополнительную информацию, например цитаты или документацию, чтобы другие могли подтвердить правильность вашего ответа. Более подробную информацию о том, как писать хорошие ответы, вы можете найти в справочном центре.
Вы можете использовать union
вместо исходной попытки union join
:
q)(union'/)(dd1;dd2;dd3)
a| 1 2 3 4
b| 3 4 7 8
c| 5 6 9 10
d| 0 1
f| ,1
e| ,2
Это также обрабатывает уникальные значения.
Как можно гарантировать, что в объединении будут использоваться только различные значения? Чтобы если вы примените операцию дважды, значения не будут дублироваться.