定义一个函数以从一个字符串创建一个新字典

时间:2017-11-10 07:45:18

标签: python string function dictionary

我有一个关于一种名为" new_mol"

的低位新化学物质的PDB格式代码
new_mol= """
ATOM     45  C  BARG A  -3      12.759  86.530  96.365  0.50 36.39     C
ATOM     46  O  BARG A  -3      12.924  87.757  96.420  0.50 37.26     O
ATOM     47  CB BARG A  -3      13.428  85.746  93.980  0.50 36.60     C
ATOM     48  CG BARG A  -3      12.866  85.172  92.651  0.50 37.31     C
ATOM     49  CD BARG A  -3      13.374  85.886  91.406  0.50 37.66     C
ATOM     50  NE BARG A  -3      12.644  85.487  90.195  0.50 38.24     N
ATOM     51  CZ BARG A  -3      13.114  85.582  88.947  0.50 39.55     C
ATOM     52  NH1BARG A  -3      14.338  86.056  88.706  0.50 40.23     N

"""
import os

每行的最后一个字母是原子符号。

我想定义一个函数

def count_atom(new_mol):
num_atoms = dict()

创建字典以获得结果:

#num_atoms = {'C':5, 'O':1; 'N':2}

因此我想在Python中创建一个字典,显示new_mol变量的每个原子的总数。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

这是代码,您可以根据您的要求使用它。期望的结果是在result_dict varriable

new_mol= """
ATOM     45  C  BARG A  -3      12.759  86.530  96.365  0.50 36.39     C
ATOM     46  O  BARG A  -3      12.924  87.757  96.420  0.50 37.26     O
ATOM     47  CB BARG A  -3      13.428  85.746  93.980  0.50 36.60     C
ATOM     48  CG BARG A  -3      12.866  85.172  92.651  0.50 37.31     C
ATOM     49  CD BARG A  -3      13.374  85.886  91.406  0.50 37.66     C
ATOM     50  NE BARG A  -3      12.644  85.487  90.195  0.50 38.24     N
ATOM     51  CZ BARG A  -3      13.114  85.582  88.947  0.50 39.55     C
ATOM     52  NH1BARG A  -3      14.338  86.056  88.706  0.50 40.23     N

"""
list_of_string = new_mol.split('ATOM')
result_dict = {}
for string in list_of_string:
    chamical_info = string.strip()
    if chamical_info:
        print chamical_info[-1]
        if result_dict.has_key(chamical_info[-1]):
            result_dict[chamical_info[-1]] = result_dict[chamical_info[-1]] + 1
        else:
            result_dict[chamical_info[-1]] = 1


print result_dict

答案 1 :(得分:0)

模块集合中有一个类计数器可以很好地执行。如果你有一个原子列表,你只需要用Counter(atoms)创建一个计数器,你就可以获得所需的结果。

from collections import Counter

new_mol= """
ATOM     45  C  BARG A  -3      12.759  86.530  96.365  0.50 36.39     C
ATOM     46  O  BARG A  -3      12.924  87.757  96.420  0.50 37.26     O
ATOM     47  CB BARG A  -3      13.428  85.746  93.980  0.50 36.60     C
ATOM     48  CG BARG A  -3      12.866  85.172  92.651  0.50 37.31     C
ATOM     49  CD BARG A  -3      13.374  85.886  91.406  0.50 37.66     C
ATOM     50  NE BARG A  -3      12.644  85.487  90.195  0.50 38.24     N
ATOM     51  CZ BARG A  -3      13.114  85.582  88.947  0.50 39.55     C
ATOM     52  NH1BARG A  -3      14.338  86.056  88.706  0.50 40.23     N
"""

atoms = [line.split()[-1] for line in new_mol.splitlines() if line.startswith('ATOM')]
atom_count = Counter(atoms)