У меня есть вложенный словарь в Python, например:
funcs = {1:{-1:{'a': 1, 'b': 2}, 0:{'a': 3, 'b': 4}, 1:{'a': 5, 'b': 6}},
2:{-2:{'a': 7, 'b': 8}, -1:{'a': 9, 'b': 10}, 0:{'a': 11, 'b': 12}, 1:{'a': 13, 'b': 14}, 2:{'a': 15, 'b': 16}}}
Он имеет три уровня вложенных словарей:
- первый уровень
m
ключи запускаются из 1
до некоторого N
(здесь N = 2
) - ключи второго уровня
n
работают от -m
до m
: для m=1
это -1, 0, 1
, для m=2
, это -2,-1,0,1,2
- третий уровень
p
клавиши работают над 'a'
и 'b'
- значения
1, 2, 3, ..., 16
являются только примерами значений.
Мне нужно запустить функцию g(x,y)
для каждой возможной пары значений на самом низком уровне словаря (т.е. операций 16x16). Очевидно, что я могу сделать это, запустив все ключи в 6-вложенном l oop, но я надеялся на что-то более эффективное и pythoni c.
Если внешний уровень имел только m = 1 полученная матрица будет выглядеть так:
g(f[1][-1][a], f[1][-1][a]), g(f[1][-1][a], f[1][-1][b]), g(f[1][-1][a], f[1][0][a]), g(f[1][-1][a], f[1][0][b]), g(f[1][-1][a], f[1][1][a]), g(f[1][-1][a], f[1][1][b])
g(f[1][-1][b], f[1][-1][a]), g(f[1][-1][b], f[1][-1][b]), g(f[1][-1][b], f[1][0][a]), g(f[1][-1][b], f[1][0][b]), g(f[1][-1][b], f[1][1][a]), g(f[1][-1][b], f[1][1][b])
g(f[1][0][a], f[1][-1][a]), g(f[1][0][a], f[1][-1][b]), g(f[1][0][a], f[1][0][a]), g(f[1][0][a], f[1][0][b]), g(f[1][0][a], f[1][1][a]), g(f[1][0][a], f[1][1][b])
g(f[1][0][b], f[1][-1][a]), g(f[1][0][b], f[1][-1][b]), g(f[1][0][b], f[1][0][a]), g(f[1][0][b], f[1][0][b]), g(f[1][0][b], f[1][1][a]), g(f[1][0][b], f[1][1][b])
g(f[1][1][a], f[1][-1][a]), g(f[1][1][a], f[1][-1][b]), g(f[1][1][a], f[1][0][a]), g(f[1][1][a], f[1][0][b]), g(f[1][1][a], f[1][1][a]), g(f[1][1][a], f[1][1][b])
g(f[1][1][b], f[1][-1][a]), g(f[1][1][b], f[1][-1][b]), g(f[1][1][b], f[1][0][a]), g(f[1][1][b], f[1][0][b]), g(f[1][1][b], f[1][1][a]), g(f[1][1][b], f[1][1][b])