Python在字典中搜索键时仅使用字符串中的第一个字母

时间:2015-01-06 04:28:54

标签: python loops dictionary

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

1 个答案:

答案 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)

...