Python-从子字符串列表中搜索列表中的子字符串

时间:2019-12-13 11:33:37

标签: python list substring

尝试使用关键字列表通过关键字搜索另一个字符串列表。其中一些格式有些奇怪。

results_list = ['user 1 \n    date of birth', '11 Jan 1990','user 1 age', '29','user 1 income', '60 000',
'user 2 \n    username', 'guest_user2','user 2 age', '25','user 2 income', '45 000']
keywords = ['date of birth','age','income','username']

我尝试了以下代码:

final_dict = {}
for r in range(len(results_list)):
   for word in range(len(keywords)):
       if keywords[words] in results_list[r]:
           print(keywords[word])
           print(results_list[r])
           r_key_idx = results_list.index(results_list[r])
           r_val_idx = r_key_idx + 1
           dictionary = {results_list[r_key_idx]:results_list[r_val_idx]}
           final_dict.update(dictionary)

这将导致输出字典

{'user 1 age':'29', 'user1 income':'60 000', 'user 2 age':'25', 'user2 income':'45 000'}

* note,在此示例中,它查找子字符串。但是在我的工作数据集中却没有。在repl.it中对其进行了测试,并且有效。

似乎没有抓住其中有\n的人。我不想仅仅创建一堆不同的关键字,因为它会基于表中的值而经常变化,并且它是一个很大的表,并且使用\n来创建数百个不同的关键字似乎是不折不扣的。

另外,请注意示例与我的实际数据集不同(\n后面的实际数据集大约有12个空格,不确定是否会改变任何内容)。

2 个答案:

答案 0 :(得分:1)

尝试先清理数据列表,然后运行代码。像下面这样清理您的数据。此后,您的关键字应该匹配。

results_list = ['user 1 \n    date of birth', '11 Jan 1990','user 1 age', '29','user 1 income', '60 000',
'user 2 \n    username', 'guest_user2','user 2 age', '25','user 2 income', '45 000']

for index, res in enumerate(results_list):
    if '\n' in res:
        new_res = res.split('\n')
        #remove empty space to the left
        new_res[1] = new_res[1].lstrip(" ")
        results_list[index] = "".join(new_res)

print(results_list)#place your code after this line


#['user 1 date of birth', '11 Jan 1990', 'user 1 age', '29', 'user 1 income', '60 000', 'user 2 username', 'guest_user2', 'user 2 age', '25', 'user 2 income', '45 000'] 

答案 1 :(得分:0)

比较之前,您需要清理字符串。

还有一件事情,如果results_list总是有一个键及其在下一个索引上的值,那么您可以将range方法与jump参数(第3个参数)一起使用

final_dict = {}
for i in range(0, len(results_list), 2):
    # This will change multiple spaces into 1 including \n
    key = " ".join(results_list[i].split())
    print(key)
    if [keyword for keyword in keywords if keyword in key]:
        final_dict[key] = results_list[i+1]