从 Python 中的许多选项到 select 的干净方式
Clean way to select from many options in Python
我从事数据科学工作,我在清理 Pandas 数据帧时遇到的一个典型问题是将列从一种字符串格式转换为另一种字符串格式(特别是,我正在查看的字符串是化学标识符,每个它们中的一些以一种模糊的方式代表一个分子,所以它不像是仅仅通过观察它们就很容易理解的字符串)。我有许多小函数(继承自名为 RDKit 的化学库)以在格式之间进行转换,每个转换对(即输入格式和输出格式)大致有一个函数。函数名太多,记不住。我想编写一个包装函数,将所有这些函数聚合成一个更大的函数,具有简洁的设计和用户界面。
问题是:给定输入和输出格式,从许多可能的小转换函数中 select 的干净方法是什么?我应该使用存储小转换函数名称的字典吗?
例如,假设我想将格式 "smiles" 转换为格式 "inchi keys",我目前的操作如下:
from rdkit import Chem
def smile2inchikey(smile):
mol = Chem.MolFromSmiles(smile)
inchikey = Chem.inchi.MolToInchiKey(mol)
return inchikey
而不是手动调用smile2inchikey
(或Chem.MolFromSmiles
和Chem.inchi.MolToInchiKey
),我想编写以下函数:
def fancy_multiconverter(input_string, input_format, output_format):
pass
其中 returns input_string
(以格式 input_format
给出)到格式 output_format
).
也许这也是@Quinten Cabo 的意思,但您可以使用一个单位,每次都转换为该单位。
然后您可以使用带有函数的字典来转换此单位:
convert_to_reference = {
"format1": function1,
"format2": function2,
}
convert_from_reference = {
...
}
reference = convert_to_reference[input("input format: ")](input("input value: "))
output = convert_from_reference[input("output format: ")](reference)
print(output)
我从事数据科学工作,我在清理 Pandas 数据帧时遇到的一个典型问题是将列从一种字符串格式转换为另一种字符串格式(特别是,我正在查看的字符串是化学标识符,每个它们中的一些以一种模糊的方式代表一个分子,所以它不像是仅仅通过观察它们就很容易理解的字符串)。我有许多小函数(继承自名为 RDKit 的化学库)以在格式之间进行转换,每个转换对(即输入格式和输出格式)大致有一个函数。函数名太多,记不住。我想编写一个包装函数,将所有这些函数聚合成一个更大的函数,具有简洁的设计和用户界面。
问题是:给定输入和输出格式,从许多可能的小转换函数中 select 的干净方法是什么?我应该使用存储小转换函数名称的字典吗?
例如,假设我想将格式 "smiles" 转换为格式 "inchi keys",我目前的操作如下:
from rdkit import Chem
def smile2inchikey(smile):
mol = Chem.MolFromSmiles(smile)
inchikey = Chem.inchi.MolToInchiKey(mol)
return inchikey
而不是手动调用smile2inchikey
(或Chem.MolFromSmiles
和Chem.inchi.MolToInchiKey
),我想编写以下函数:
def fancy_multiconverter(input_string, input_format, output_format):
pass
其中 returns input_string
(以格式 input_format
给出)到格式 output_format
).
也许这也是@Quinten Cabo 的意思,但您可以使用一个单位,每次都转换为该单位。
然后您可以使用带有函数的字典来转换此单位:
convert_to_reference = {
"format1": function1,
"format2": function2,
}
convert_from_reference = {
...
}
reference = convert_to_reference[input("input format: ")](input("input value: "))
output = convert_from_reference[input("output format: ")](reference)
print(output)