Python: модификация функции для поиска значений в словаре - PullRequest
0 голосов
/ 03 ноября 2011

Я написал простую функцию, которая получает словарь и строку в качестве параметра.Функция использует строку для поиска в словаре, а затем возвращает новый словарь с результатами.

Теперь мне нужна помощь в изменении этого кода или создании новой функции, которая при передаче строки ищет значения в паре 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 ]

3 голосов
/ 03 ноября 2011
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) не является строкой и поэтому не может содержать другая строка.

1 голос
/ 03 ноября 2011

В 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).

0 голосов
/ 03 ноября 2011

Что ж, если у вас есть ключ i, значение этого ключа будет aDictionary[i], поэтому просто продлите тестирование.

Существуют более оптимальные способы сделать это, которые не делаютпоиск явно, но вышеприведенное является простым и понятным, и во многих случаях должно подойти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...