Такое простое толкование слов также будет работать:
>>> names = ['A', 'B', 'C']
>>> {x: dict.fromkeys(names[:i] + names[i+1:], 0) for i, x in enumerate(names)}
{'A': {'B': 0, 'C': 0}, 'B': {'A': 0, 'C': 0}, 'C': {'A': 0, 'B': 0}}
Объяснение:
- Получить все остальные элементы с нарезкой списка:
names[:i] + names[i+1:]
- инициализировать значения словаря в ноль с помощью
dict.fromkeys
- Использование
enumerate
для итерации по индексу и элементу names
Кроме того, мы можем использовать разницу между наборами, если нам не важен порядок ключей, как VPfb показывает в комментариях:
>>> names = {'A', 'B', 'C'}
>>> {x: dict.fromkeys(names - {x} , 0) for x in names}
{'B': {'C': 0, 'A': 0}, 'C': {'B': 0, 'A': 0}, 'A': {'B': 0, 'C': 0}}