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

Python:修改函数以在字典中搜索值,python,dictionary,Python,Dictionary,我编写了一个简单的函数,它接收一个字典和一个字符串作为参数。该函数使用该字符串搜索字典,然后返回一个新的带有结果的字典 现在我需要一些帮助来修改这个代码,或者创建一个新函数,当传递一个字符串时,在key:value对中搜索值,而不是只搜索键。所以,如果我将“1”作为参数传递,我会得到一个新的字典,其中包括cat 希望这是清楚的。提前谢谢 a = {'rainbows': 'xbox', 'solider': 'miltary', 'cat': 1} def searchKeys(aDictio

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

现在我需要一些帮助来修改这个代码,或者创建一个新函数,当传递一个字符串时,在
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'}

好的,一旦你有了一个键
i
,这个键的值就是
aDictionary[i]
,所以只要扩展你的测试就可以了


有更多的最佳方法可以做到这一点,它们不需要显式地进行查找,但是上面的方法简单易懂,在很多情况下都应该可以使用。

好吧,一旦你有了一个键
i
,该键的值就是
aDictionary[i]
,所以只要扩展你的测试就可以了

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

    for k,v in aDictionary.iteritems():
        if searchTerm in k or searchTerm in v:
            results[k] = v
    return results
有更多的最佳方法可以做到这一点,即不进行显式的查找,但上面的方法简单明了,易于理解,对于许多情况都应该是好的

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)
但是,它不适用于示例词典,因为
1
(cat的值)不是字符串,因此不能包含其他字符串

或更短:

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

但是,它不适用于示例词典,因为
1
(cat的值)不是字符串,因此不能包含其他字符串。

对于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)}

或者,如果您确定所有的值都是字符串,您可以只在v中编写
,而不用在Python 2.7的str(v)
中编写
,这是最简单的解决方案:

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

或者,如果您确定所有的值都是字符串,您可以只在v
中编写
,而不是在str(v)
中编写

,这会起作用,但我的解决方案必须使用python 3.2进行编码。而且我认为.iteritems()方法已被弃用。@mystxhobo,然后简单地使用
.items()
即可。这会起作用,但我的解决方案必须使用python 3.2进行编码。而且我认为.iteritems()方法已被弃用。@Xhobo,然后简单地使用
.items()