Python:修改函数以搜索字典中的值

时间:2011-11-03 14:09:47

标签: python dictionary

我写了一个简单的函数,它接收字典和字符串作为参数。该函数使用字符串搜索字典,然后返回带有结果的新字典。

现在我需要一些帮助修改此代码或创建一个新函数,在传递字符串时,在key:value对中搜索值,而不是仅使用键。因此,如果我传递'1'作为参数,我会得到一个包含cat的新词典。

希望这很清楚。提前致谢。

a = {'rainbows': 'xbox', 'solider': 'miltary', 'cat': 1}

def searchKeys(aDictionary,searchTerm):
    results = {}

    for i in aDictionary:
        if searchTerm in i:
            results[i] = aDictionary[i]
    return results

###searchKeys(a,'r') -> {'rainbows': 'xbox', 'solider': 'miltary'}

3 个答案:

答案 0 :(得分:3)

def searchKeys(aDictionary,searchTerm):
    results = {}

    for k,v in aDictionary.iteritems():
        if searchTerm in k or searchTerm in v:
            results[k] = v
    return results

或更短:

results = dict((k,v) for k,v in a.iteritems() if searchItem in k or searchItem in v)

然而,它不适用于您的示例字典,因为1cat的值)不是字符串,因此不能包含另一个字符串。

答案 1 :(得分:1)

使用Python 2.7,这是最简单的解决方案:

def searchItems(aDictionary, searchTerm):
    return {k:v for k, v in aDictionary.iteritems()
        if searchTerm in k or searchTerm in str(v)}

或者,如果您确定所有值都是字符串,则只需编写in v而不是in str(v)

答案 2 :(得分:0)

好吧,一旦你有一个密钥i,该密钥的值为aDictionary[i],所以只需扩展你的测试。

有更多最佳方法可以做到这一点,不会明确地进行查找,但上述内容是直截了当且易于理解的,并且在许多情况下应该没问题。