求助:Python实现树形数组转换为特定化学分子式字符串
解决方案
可以写一个递归函数来处理这种嵌套结构,逻辑清晰不容易乱:
def format_formula(items): result = [] for item in items: # 每个item是单个键值对的字典 for subscript, content in item.items(): if isinstance(content, str): # 处理单一元素:下标为1时只写元素,否则拼接元素+下标 part = content + (str(subscript) if subscript != 1 else "") result.append(part) elif isinstance(content, list): # 处理嵌套子列表,递归处理后加括号,再拼接下标 sub_part = format_formula(content) wrapped = f"({sub_part})" + (str(subscript) if subscript != 1 else "") result.append(wrapped) # 拼接所有部分得到最终分子式 return "".join(result) # 测试示例输入 input_data = [{3: 'Ca'}, {2: [{1: 'P'}, {4: 'O'}]}] print(format_formula(input_data)) # 输出: Ca3(PO4)2
代码说明
- 递归处理嵌套:遇到子列表时调用自身先处理内部元素,不管嵌套多少层都能适配(比如
[{2: [{1: 'Na'}, {1: [{1: 'H'}, {1: 'C'}, {3: 'O'}]}]}]会转换成Na2(HCO3)2)。 - 下标自动优化:遵循化学分子式习惯,下标为1时自动省略,大于1时才显示。
- 遍历逻辑简洁:逐个处理列表中的字典项,每个字典仅含一组键值对,直接遍历即可。
为什么直接拼接效果差?
嵌套结构需要先处理内部子项再处理外部,顺序拼接会搞反逻辑或遗漏括号,递归能完美解决这种“先内后外”的处理需求。
内容的提问来源于stack exchange,提问作者worte
相关产品推荐
相关产品推荐

