我有一个小 (<100) 化学名称列表,称为detected_chems
.
还有第二个更大(> 1000)的可迭代;chem_db
包含化学名称的字典作为键,化学特性字典作为值。像这样:
{'chemicalx':{'property1':'smells','property2':'poisonous'}, 'chemicaly':{'property1':'stinks','property2':'toxic'}}
我正在尝试将所有检测到的化学物质与数据库中的化学物质进行匹配并提取它们的属性。
所以我正在制作一个结果列表,但是我创建了这个res,而不是嵌套的带有条件的循环。if x in
res = [{chem:chem_db[chem]}
for det_chem in detected_chems
for chem in chem_db.keys()
if det_chem in chem]
这在一定程度上有效!
我(认为)在这里做的是创建一个字典列表,如果发现检测到的化学物质,它将具有化学名称(键)的键:值对和有关化学物质的信息(作为字典本身,作为值)化学数据库(chem_db)中的某处。
问题不是所有检测到的化学物质都在数据库中找到。这可能是由于拼写错误或名称变化(例如,它们包括数字)或类似的原因。
所以为了解决这个问题,我需要确定哪些检测到的化学物质不匹配。我认为这可能是一个解决方案:
not_matched=[]
res = [{chem:chem_db[chem]}
for det_chem in detected_chems
for chem in chem_db.keys()
if det_chem in chem else not_matched.append(det_chem)]
由于部分原因,我收到语法错误else not_matched.append(det_chem)。
我有两个问题:
1)我应该把 else 条件放在哪里以避免语法错误?
2)可以在not_matched列表理解中构建列表,所以我不会先创建那个空列表。
res = [{chem:chem_db[chem]}
for det_chem in detected_chems
for chem in chem_db.keys()
if det_chem in chem else print(det_chem)]
我想要实现的是:
in: len(detected_chems)
out: 20
in: len(res)
out: 18
in: len(not_matched)
out: 2
in: print(not_matched)
out: ['chemical_strange_character$$','chemical___WeirdSPELLING']
这将帮助我找到匹配问题。
胡说叔叔
开心每一天1111
湖上湖
相关分类