【问题标题】:Python only using first letter in string when searching keys in a dictionaryPython 在字典中搜索键时仅使用字符串中的第一个字母
【发布时间】:2015-03-03 17:34:47
【问题描述】:

这里是 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

【问题讨论】:

  • 你为什么要遍历密钥?密钥只是一个字符串;直接用就行了。
  • 为什么要在for循环中定义搜索功能?
  • 在你的代码中 v 是字符串键中的一个字符。当lookup 也有该字符时,search 函数返回该字符。它不会返回错误的。

标签: python loops dictionary


【解决方案1】:

您定义了许多名为search 的函数,每个函数都删除了另一个函数,最后只调用了您碰巧定义的最后一个函数。在循环中使用def 语句是不常见的,使用def 肯定是错误的,但不在循环的每一段中调用/使用该函数。

此外,for v in key:,其中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)

...?

【讨论】:

    猜你喜欢
    • 2015-11-29
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    相关资源
    最近更新 更多