gpt4 book ai didi

python - 从一串元素python形成化学式

转载 作者:行者123 更新时间:2023-12-04 04:09:48 25 4
gpt4 key购买 nike

我想问一个关于将项目列表转换为字符串的问题。

我有以下 SiH2O 分子列表,其中 2 表示 2 个氢原子的下标:

[['Si', array([0, 1, 2])], 
['H', array([3, 4, 5])],
['O', array([6, 7, 8])],
['H', array([3, 4, 5])]]

我的目的是将此数据转换为化学式,即 SiH2O。

另一个例子如下:

['H', array([3, 4, 5])], 
['F', array([6, 7, 8])],
['H', array([3, 4, 5])]]

我正在尝试将其转换为 H2F(没有任何下标格式 - 我纯粹想获得 H2F 输出。)

目前我的尝试如下:

我首先遍历字符串以检索所有化学符号:

symbols = []
for item in string:
symbols.append(item[0])
symbols

然后我试图在字符串中找到唯一的原子(即一串元素在字符串中只重复一次):

unique = []
for i in symbols:
if i not in unique:
unique.append(i)

然后返回

['Si', 'H', 'O']

['H', 'F'] 

分别。

我试图创建一个包含元素及其计数的字典,原始默认值为 0:

myDict = {key:0 for key in unique}

然后尝试通过字典进行计数。

for item in symbols:
count = myDict[item]
count += 1
myDict[item] = count

返回:

{'Si': 1, 'H': 2, 'O': 1}

现在,我想使用key, value 对来编译字符串SiH2O。我使用条件 if value == 1 那么我不会在化学符号后附加下标数字。

这是我尝试的代码。

chemical_string = ""
for key, value in symbols:
if value == 0:
chemical_string += key
else:
chemical_string += key + "" + value

我期望结果 SiH2O 但我陷入了这个错误:

ValueError                                Traceback (most recent call last)
<ipython-input-57-d5312c683c2e> in <module>
1 chemical_string = ""
----> 2 for key, value in myDict:
3 if value == 0:
4 chemical_string += key
5 else:

ValueError: not enough values to unpack (expected 2, got 1)

我很困惑为什么这不起作用。我该如何解决这个问题?

最佳答案

根据@Luka Mensaric 的回答,我需要使用 .items() 方法。

我还意识到我需要在 else 语句中将 value 转换为 str:

chemical_string = ""
for key, value in myDict.items():
if value == 1:
chemical_string += key
else:
chemical_string += key + "" + str(value)

关于python - 从一串元素python形成化学式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61941135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com