Поиск в списке персонажей - PullRequest
0 голосов
/ 30 июня 2018

Я сделал большой объем поиска, но не могу найти то, что я после. Я использую Iron Python.

У меня есть большой список строк (MyList), которые я извлек, и я хотел бы посмотреть, есть ли значения, которые содержат элементы в словаре SearchStrings. Словарь searchStrings может содержать более 500 элементов.

MyList = ["123steel","MylistConcrete","Nothinginhere","45","56","steel","CONCRETE"]
SearchStrings = {'concrete' : 'C','CONCRETE' : 'C','Steel' : 'S', 'STEEL' : 'S'}

Мне нужно вернуть индекс и затем соответствующий код из SearchString.

т.е. если мы найдем 'MylistConcrete', я узнаю индекс '1' и смогу вернуть 'C'

Надеюсь, это имеет смысл для всех. Дайте мне знать, если вам нужны какие-либо разъяснения

Заранее спасибо,

Geoff.

Ответы [ 3 ]

0 голосов
/ 30 июня 2018
for m in MyList :
    for k in SearchStrings :
        if k.lower() in m.lower() :
            print 'found', k, 'in', m, 'result', SearchStrings[k]
0 голосов
/ 30 июня 2018

Прежде всего, я бы предложил вам использовать string.lower() для устранения зависимостей в поиске. Это сделает ваш словарь меньше и более управляемым.

Затем вы можете использовать простую функцию map для создания нового массива со своими значениями, сохраняя при этом индекс (или, если потребуется, измените оригинал).

MyList = ["123steel","MylistConcrete","Nothinginhere","45","56","steel","CONCRETE"]
SearchStrings = {'concrete' : 'C', 'steel' : 'S'}

def check_search_strings(x):
    for k, v in SearchStrings.items():
        if k in x.lower():
            return v
    return None

indexes = list(map(check_search_strings, MyList))

print (indexes)
0 голосов
/ 30 июня 2018

Перебирайте свои элементы в MyList и проверяйте для каждого элемента (строчные буквы), есть ли в нем какие-либо из ключей dict (строчные). Тогда замени. Это предполагает, что у вас нет разных значений для идентичных слов в качестве ключей (за исключением разницы в нижнем / верхнем регистре)

my_list = ["123steel", "MylistConcrete", "Nothinginhere", "45", "56", "steel", "CONCRETE"]
search_strings = {'concrete': 'C', 'CONCRETE': 'C', 'Steel': 'S', 'STEEL': 'S'}

for i in range(len(my_list)):
    for k, v in search_strings.items():
        if k.lower() in my_list[i].lower():
            my_list[i] = v
            break   # avoids completing the loop if first item is found
print(my_list)

Результат

['S', 'C', 'Nothinginhere', '45', '56', 'S', 'C']
...