词典列表的Python词典

时间:2015-02-09 16:24:58

标签: python dictionary nested

我希望能够从文件中访问数据,将它们组织成一个我认为应该是字典列表的结构,从我的理解,可能如下所示:

ID_FILE = { 
        'KEY_1': [
                    {
                        'R_1': [
                                {
                                    'A_1': [
                                            {
                                                'P_1': ['a', 'b', 'c', 'd']
                                            },
                                            {
                                                'P_2': ['a', 'b', 'c', 'd']
                                            },
                                            {
                                                'P_3': ['a', 'b', 'c', 'd']
                                            }
                                        ],
                                    'A_2': [
                                            {
                                                'P_1': ['a', 'b', 'c', 'd']
                                            },
                                            {
                                                'P_2': ['a', 'b', 'c', 'd']
                                            },
                                            {
                                                'P_3': ['a', 'b', 'c', 'd']
                                            }
                                        ],
                                    'A_3': [
                                            {
                                                'P_1': ['a', 'b', 'c', 'd']
                                            },
                                            {
                                                'P_2': ['a', 'b', 'c', 'd']
                                            },
                                            {
                                                'P_3': ['a', 'b', 'c', 'd']
                                            }
                                        ]
                                }
                            ],
                        'R_2': [
                                {
                                    'A_1': [
                                            {
                                                'P_1': ['a', 'b', 'c', 'd']
                                            },
                                            {
                                                'P_2': ['a', 'b', 'c', 'd']
                                            },
                                            {
                                                'P_3': ['a', 'b', 'c', 'd']
                                            }
                                        ],
                                    'A_2': [
                                            {
                                                'P_1': ['a', 'b', 'c', 'd']
                                            },
                                            {
                                                'P_2': ['a', 'b', 'c', 'd']
                                            },
                                            {
                                                'P_3': ['a', 'b', 'c', 'd']
                                            }
                                        ],
                                    'A_3': [
                                            {
                                                'P_1': ['a', 'b', 'c', 'd']
                                            },
                                            {
                                                'P_2': ['a', 'b', 'c', 'd']
                                            },
                                            {
                                                'P_3': ['a', 'b', 'c', 'd']
                                            }
                                        ]
                                }
                        ],
                        'R_3': [
                                {
                                    'A_1': [
                                            {
                                                'P_1': ['a', 'b', 'c', 'd']
                                            },
                                            {
                                                'P_2': ['a', 'b', 'c', 'd']
                                            },
                                            {
                                                'P_3': ['a', 'b', 'c', 'd']
                                            }
                                        ],
                                    'A_2': [
                                            {
                                                'P_1': ['a', 'b', 'c', 'd']
                                            },
                                            {
                                                'P_2': ['a', 'b', 'c', 'd']
                                            },
                                            {
                                                'P_3': ['a', 'b', 'c', 'd']
                                            }
                                        ],
                                    'A_3': [
                                            {
                                                'P_1': ['a', 'b', 'c', 'd']
                                            },
                                            {
                                                'P_2': ['a', 'b', 'c', 'd']
                                            },
                                            {
                                                'P_3': ['a', 'b', 'c', 'd']
                                            }
                                        ]
                                }
                        ]
                    }
                ],

        'KEY_2': [...as 'KEY_1'...],

        'KEY_3': [...as 'KEY_1'...]
    }

我不知道它是否理想正确,但实际上我可以使用['ID_FILE']['KEY_1']['R_2']['A_3']['P_2'].b等命令访问字典数据(使用方括号选择字典&#39) ; s键,以及括号外所需值的点),以了解b P_2的{​​{1}}值A_3 R_2 KEY_1 ['ID_FILE']['KEY_1'].R_2 ,或['A_1', 'A_2' , 'A_3']并获取列表KEY = column 6 R = column 8 A = column 3 P = Atom row = list of columns a = column 1 b = column 2 c = column 3 d = column 4 ,即选择字典的键,最后指示所需信息,以获得最终输出......

结构非常复杂,但概念是可推广的,我会通过什么方法,python模块或最佳方法来理解,我可以在python中实现这一点;如果首选从外部或从内部开始,组织和连接字典到独特的大词典...

编辑1:也就是说,使用上一个键的值作为新子词典的键。

编辑2:源文件是一个CIF文件,如this(它是一个170925行的大文件)。考虑到cif文件,我分析了以ATOM开头的行,将它们分成列:

{{1}}

因此,例如,为了获得链A(第6列)的残基271(第8列)的原子N(第3列)的x坐标(第10列),给出类似[' 4tvx& #39;] [' A'] [' 271'] [' N'。] coordX

2 个答案:

答案 0 :(得分:0)

看起来你的架构并不理想(虽然很难在不了解你所存储的内容的情况下判断)。通过查看您的数据,KEY_1,R_1和A_1应该是字典而不是列表。通过简化结构,您将使用[ID_FILE] [KEY_1] [R_2] [A_3] [P_2] .b

答案 1 :(得分:0)

感谢Stephen Rumbalski向我表明这个工具PyCifRW,但是,回答我的主题问题,所需的结构是字典词典,以实现那个gool:

r_list = ['20', '21']
dictionary = {}
r_dict = {}
a_dict = {}
for r in range(0,len(r_list)):
    r = r_list[r]
    dictionary['C'] = r_dict
    r_dict[r] = a_dict

print dictionary
print dictionary['C']

"""output:

{'C': {'20': {}, '21': {}}}
{'20': {}, '21': {}}

equal to:

dictionary = {'C': {
                    '20': {},
                    '21': {}
                }
            }
"""
相关问题