Вы можете сделать:
d = {'A': [1, 2], 'B': [1], 'C': [1, 3], 'D': [2]}
values = sorted(set(e for v in d.values() for e in v))
result = {k : [1 if value in v else 0 for value in values] for k, v in d.items()}
print(result)
Вывод
{'A': [1, 1, 0], 'B': [1, 0, 0], 'C': [1, 0, 1], 'D': [0, 1, 0]}
Если существует множество значений, которые вы можете использовать наборы для проверки содержания, что-то вроде этого:
d = {'A': [1, 2], 'B': [1], 'C': [1, 3], 'D': [2]}
d = { k : set(v) for k, v in d.items() }
Более сжатый способ, предложенный @Ev. Kounis должен сделать:
result = {k : [int(value in v) for value in values] for k, v in d.items()}
Наконец, если вас интересует список структуры данных списка (то есть матрицы), вы можете поместить значения результата в список:
print(list(result.values()))
Выход
[[1, 1, 0], [1, 0, 0], [1, 0, 1], [0, 1, 0]]