假设我有一个使用 defaultdict 创建的字典,像这样(几百点长):
L [(32.992, 22.861, 29.486, 'TYR'), (32.613, 26.653, 29.569, 'VAL'), (30.029, 28.873, 27.872, 'LEU')
A [(1.719, -25.217, 8.694, 'PRO'), (2.934, -21.997, 7.084, 'SER'), (5.35, -19.779, 8.986, 'VAL')
H [(-0.511, 19.577, 27.422, 'GLU'), (2.336, 18.416, 29.649, 'VAL'), (2.65, 19.35, 33.322, 'GLN')
然后我想遍历每个键中的每个值,并检查从该值到其他键下每个其他残基的距离。我知道如何使用一个简单的公式来检查距离,但是我在让循环正常工作时遇到了问题。理想情况下,它将检查 L 中的每个点与 A 和 H 中的每个点,然后继续检查 A 中的 each_value 与 L 和 H 等...
我尝试过简单的理解,但在完成之前我总是只得到一条链来检查另一条链。任何帮助表示赞赏。
我正在从这样的 PDB 文件中提取坐标:
xyz = []
for line in pdb_file:
if line.startswith("ATOM"):
# get x, y, z coordinates for Cas
chainid = str((line[20:23].strip()))
atomid = str((line[16:20].strip()))
pdbresn= int(line[23:26].strip())
x = float(line[30:38].strip())
y = float(line[38:46].strip())
z = float(line[46:54].strip())
if line[12:16].strip() == "CA":
xyz.append((chainid,x,y,z,atomid))
然后将其放入这样的字典中:
d = defaultdict(list)
for c,x,y,z,cid in xyz:
d[c].append((x,y,z,cid))
当我`打印(d)时给出这个:
defaultdict(<class 'list'>, {'L': [(32.992, 22.861, 29.486, 'TYR'), (32.613, 26.653, 29.569, 'VAL'), (30.029, 28.873, 27.872, 'LEU')],'H': [(30.254, 32.655, 27.849, 'THR'), (27.487, 35.089, 27.0, 'GLN'), (27.343, 38.9, 27.424, 'PRO')], 'A': [(25.621, 40.067, 30.641, 'PRO'), (23.161, 42.327, 28.82, 'SER'), (22.086, 43.358, 25.326, 'VAL'), (20.081, 46.519, 24.785, 'SER'), (18.23, 46.826, 21.488, 'VAL')]})