簡體   English   中英

由一串元素 python 形成化學式

[英]Forming a chemical formula from a string of elements python

我想問一個關於將項目列表轉換為字符串的問題。

我有以下 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 output。)

到目前為止,我的嘗試如下:

我首先遍歷字符串以檢索所有化學符號:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM