Словарь с вложенными уровнями переставлен на 1 уровень - PullRequest
0 голосов
/ 04 марта 2020

У меня есть словарь с 3 уровнями:

f = {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}}}

Фактические значения словаря всегда находятся на самом низком, 3-м уровне, все до этого является ключом. Я ищу способ объединить словарь в одноуровневый словарь, но все еще сохраню три отдельные метки: m от 1 до N, n от -m до m и p = 'a', 'b'.

Я думал о том, чтобы сделать это со строкой, например,

f = {"1,-1,a": 1, "1,-1,a": 2, "1,0,a": 3, ...}

, но в коде дела идут дальше, когда m и n становятся двойными git номера. Поэтому в идеале я ищу что-то вроде:

f[[m][n][p]] = value

Возможно ли это?

1 Ответ

3 голосов
/ 04 марта 2020

Понимание словаря должно работать:

f = {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}}}

d = { (a,b,c):v for a,da in f.items() for b,db in da.items() for c,v in db.items()}

результат:

for k,v in d.items(): print(k,":",v)

(1, -1, 'a') : 1
(1, -1, 'b') : 2
(1, 0, 'a') : 3
(1, 0, 'b') : 4
(1, 1, 'a') : 5
(1, 1, 'b') : 6
(2, -2, 'a') : 7
(2, -2, 'b') : 8
(2, -1, 'a') : 9
(2, -1, 'b') : 10
(2, 0, 'a') : 11
(2, 0, 'b') : 12
(2, 1, 'a') : 13
(2, 1, 'b') : 14
(2, 2, 'a') : 15
(2, 2, 'b') : 16

d[2,-1,'b'] # --> 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...