【问题标题】:Define a function to create a new dictionary from one string定义一个函数以从一个字符串创建一个新字典
【发布时间】:2018-04-23 09:30:36
【问题描述】:

我有以下关于一种名为“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 变量的每个原子的总数。

提前感谢您的帮助。

【问题讨论】:

  • 嗨!欢迎。你没有忘记问一个精确的问题(或者实际上,任何问题)——我们不能为你编写代码,所以如果你尝试过会更好,然后展示你尝试过的内容,为什么它没有用,并提出您需要提出的问题来解决您的问题。
  • 输入字符串看起来像一个文件。如果从文件中获取它,只需逐行处理文件,计算最后一个非空格字符的出现次数,如果它确实是一个字符串,则使用io 模块像文件对象一样处理它:Python 中的io.BytesIO 2 或 io.StringIO 在 Python 3 中

标签: python string function dictionary


【解决方案1】:

这是代码,您可以根据需要使用它。期望的结果在 result_dict 变量中

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

【讨论】:

    【解决方案2】:

    模块集合中有一个类 Counter 可以做到这一点。当您拥有原子列表时,您只需使用 Counter(atoms) 创建一个 Counter 即可获得所需的结果。

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多