在列表中搜索字符

时间:2018-06-30 12:36:28

标签: python list dictionary ironpython

我进行了大量搜索,但找不到我想要的。我正在使用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'

我希望这对所有人都有意义。让我知道您是否需要任何澄清

预先感谢

杰夫。

3 个答案:

答案 0 :(得分:2)

首先,建议您使用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)

答案 1 :(得分:1)

遍历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']

答案 2 :(得分:1)

for m in MyList :
    for k in SearchStrings :
        if k.lower() in m.lower() :
            print 'found', k, 'in', m, 'result', SearchStrings[k]