重新排列python中嵌套字典的级别

Pet*_*ham 5 python data-structures

是否有一个库可以帮助我完成重新排列嵌套字典级别的任务

例如:从这个:

{1:{"A":"i","B":"ii","C":"i"},2:{"B":"i","C":"ii"},3:{"A":"iii"}}
Run Code Online (Sandbox Code Playgroud)

对此:

{"A":{1:"i",3:"iii"},"B":{1:"ii",2:"i"},"C":{1:"i",2:"ii"}}
Run Code Online (Sandbox Code Playgroud)

即三个字体上的前两个级别交换.因此,我们将A映射到1和3,而不是1映射到A和3映射到A.

该解决方案应该适用于任意深度,并从一个级别移动到任何其他级别.

max*_*moo 6

One way to think about this would be to consider your data as a (named) array and to take the transpose. An easy way to achieve this would be to use the data analysis package Pandas:

import pandas as pd

df = pd.DataFrame({1: {"A":"i","B":"ii","C":"i"},
                   2: {"B":"i","C":"ii"},
                   3: {"A":"iii"}})
df.transpose().to_dict()

{'A': {1: 'i', 2: nan, 3: 'iii'},
 'B': {1: 'ii', 2: 'i', 3: nan},
 'C': {1: 'i', 2: 'ii', 3: nan}}
Run Code Online (Sandbox Code Playgroud)


R N*_*Nar 5

>>> d = {1:{"A":"i","B":"ii","C":"i"},2:{"B":"i","C":"ii"},3:{"A":"iii"}}
>>> keys = ['A','B','C']
>>> e = {key:{k:d[k][key] for k in d if key in d[k]} for key in keys}
>>> e
{'C': {1: 'i', 2: 'ii'}, 'B': {1: 'ii', 2: 'i'}, 'A': {1: 'i', 3: 'iii'}}
Run Code Online (Sandbox Code Playgroud)

感谢上帝对字典的理解