【发布时间】:2020-05-21 18:17:36
【问题描述】:
我想问一个关于将项目列表转换为字符串的问题。
我有以下 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)
我很困惑为什么这不起作用。我该如何解决这个问题?
【问题讨论】:
-
如果你想遍历字典的
key, value,你需要myDict.items()。仅迭代myDict只会为您提供在您的情况下无法“解包”为两个单独值的键。
标签: python dictionary key