Python 词典列表词典
Python Dictionary of lists of dictionaries
我希望能够从文件中访问数据,将它们组织成一个我认为应该是字典列表的结构,据我了解,可能如下所示:
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
之类的命令访问字典的数据,例如(使用方括号 select 字典的键,以及括号外所需值的点)以了解 P_2
键的 b
值,对于 KEY_1
的 R_2
中的 A_3
,或['ID_FILE']['KEY_1'].R_2
得到一个列表['A_1', 'A_2' , 'A_3']
,也就是select字典的键,最后表示需要的信息,得到最终的输出...
结构比较复杂,但是概念是可以概括的,我会理解用什么方法,python模块或者最佳方法,我可以在python中实现;是从外入手还是从内入手,将词典整理拼接成独一无二的大词典...
编辑1:即使用上一个键的值作为新子字典的键。
编辑2:源文件是一个CIF文件,如this(这是一个有170925行的大文件)。考虑到那个 cif 文件,我正在分析以 ATOM 开头的行,将它们分成几列:
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
因此,例如,要获取链 A(第 6 列)的残基 271(第 8 列)的原子 N(第 3 列)的 x 坐标(第 10 列),请给出这样的命令 ['4tvx' ]['A']['271']['N'].coordX
您的模式似乎不太理想(尽管在不了解您存储的内容的情况下很难判断)。通过查看您的数据,KEY_1、R_1 和 A_1 应该是字典而不是列表。通过简化结构,您将使用 [ID_FILE][KEY_1][R_2][A_3][P_2].b
感谢 Steven Rumbalski 向我指出该工具,PyCifRW,但是,回答我的主题问题,需要的结构是字典的字典,以实现该目标:
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': {}
}
}
"""
我希望能够从文件中访问数据,将它们组织成一个我认为应该是字典列表的结构,据我了解,可能如下所示:
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
之类的命令访问字典的数据,例如(使用方括号 select 字典的键,以及括号外所需值的点)以了解 P_2
键的 b
值,对于 KEY_1
的 R_2
中的 A_3
,或['ID_FILE']['KEY_1'].R_2
得到一个列表['A_1', 'A_2' , 'A_3']
,也就是select字典的键,最后表示需要的信息,得到最终的输出...
结构比较复杂,但是概念是可以概括的,我会理解用什么方法,python模块或者最佳方法,我可以在python中实现;是从外入手还是从内入手,将词典整理拼接成独一无二的大词典...
编辑1:即使用上一个键的值作为新子字典的键。
编辑2:源文件是一个CIF文件,如this(这是一个有170925行的大文件)。考虑到那个 cif 文件,我正在分析以 ATOM 开头的行,将它们分成几列:
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
因此,例如,要获取链 A(第 6 列)的残基 271(第 8 列)的原子 N(第 3 列)的 x 坐标(第 10 列),请给出这样的命令 ['4tvx' ]['A']['271']['N'].coordX
您的模式似乎不太理想(尽管在不了解您存储的内容的情况下很难判断)。通过查看您的数据,KEY_1、R_1 和 A_1 应该是字典而不是列表。通过简化结构,您将使用 [ID_FILE][KEY_1][R_2][A_3][P_2].b
感谢 Steven Rumbalski 向我指出该工具,PyCifRW,但是,回答我的主题问题,需要的结构是字典的字典,以实现该目标:
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': {}
}
}
"""