Python初学者。尝试在字典中搜索字符串时遇到问题。
我正在编写的程序使用xlrd将excel电子表格(S2name)中的数据与字典键进行匹配,然后返回分配给键的值。这是为了将质量控制测试与化学数据相匹配。
字典很像这样:
dQC = {'4266152-001': 'METHOD_BLANK',
'4266152-002': 'LCS',
'4266152-004': 'LAB_DUPLICATE',
等。
我的代码正在运行,但搜索功能从字典返回错误的结果这一事实。
我已将问题分离到以下v变量:
S2name = (sheet2.cell_value(row_index, 0))
for key, value in dQC.items():
def search(dic, lookup):
for v in key:
print("This should be the key in dQC, not the number %s" % v)
if v in lookup:
return v # I would obviously return value here, but it returns the wrong one.
else:
return False
QCtype = (search(dQC, S2name))
print(QCtype)
结果:
This should be the key in dQC, not the number 4
4
由于某种原因,v只搜索字符串中的第一个数字(即:4)而不是整个字符串(即:4266152-001),所以当我使用QCtype调用该值时,它返回错误的一个。我希望v在迭代搜索时使用前10个字符,而不是第一个。
注意,在脚本中,我正在返回v只是为了检查它。否则我会回归价值。
编辑:
如果我链接到使用了一些代码的线程,也许更清楚。
我假设这会搜索字典键中的整个单词,而不是单词中的单个字母,这对我来说很有意义。
How to search if dictionary value contains certain string with Python
答案 0 :(得分:4)
您定义了许多名为search
的函数,每个函数都会删除另一个函数,最后只调用您碰巧定义的最后一个函数。在循环中使用def
语句是不常见的,使用def
但在循环的每个分支中不调用/使用该函数肯定是错误的。
此外,for v in key:
,其中key
是一个字符串,依次为v
分配key
中的每个字符。
很难理解你认为自己正在做什么,但我想你只想定义search
一次,然后打电话它在循环中。也许是这样的事情:
def search(dic, lookup, valur):
return lookup.get(key, value)
for key, value in dQC.items():
QCtype = search(dQC, S2name)
print(QCtype)
...