这里是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 只是为了检查它。否则我会返回值(value)。
编辑:
如果我链接到我使用其中一些代码的线程,也许会更清楚。
我假设这会搜索字典键中的整个单词,而不是键中的单个字母,这对我来说现在很有意义。
How to search if dictionary value contains certain string with Python
最佳答案
您正在定义许多名为 search
的函数,每个函数都会相互抵消,最后只调用您碰巧定义的最后一个函数。在循环中使用 def
语句是不常见的,并且使用 def
但不在循环的每个分支中调用/使用该函数肯定是错误的。
此外,for v in key:
,其中key
是一个字符串,依次赋值给v
,每个键中的>字符。
很难准确理解您认为自己在做什么,但我想您只想定义一次 search
,然后可能在循环中调用它。也许是这样的:
def search(dic, lookup, valur):
return lookup.get(key, value)
for key, value in dQC.items():
QCtype = search(dQC, S2name)
print(QCtype)
...?
关于Python 在字典中搜索键时仅使用字符串中的第一个字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27792094/