我在python中有一个应用程序,该应用程序接受我们要用作Azure认知搜索中的搜索词的文本(字符串)列表。搜索参数必须是字符串,因此,如果我有单词列表,则可以执行以下操作:
words_to_search_list = ["toy", "durable"]
words_to_search_str = ' '.join(words_to_search_list)
然后将words_to_search_str作为Azure搜索中的“搜索”参数传递,它可以搜索具有“耐用”或“玩具”的文本。
"toy durable"
但是,我不确定如何处理在words_to_search_list中存在双字母组或三字母组的情况,如下所示:
words_to_search_list = ["more toys", "free treats"]
为了从Azure取回包含“更多玩具”或“免费礼物”的文本,我们需要传递如下参数:
"\"more toys\" \"free treats\""
意思是二元组需要用双引号引起来,但要逃脱。
我开始这个:
words_to_search_str=""
for words in words_to_search_list:
words_list=words.split()
if len(words_list)>1:
words_escaped='\\"'+ words + '\\"'
words_to_search_str+=words_escaped
else:
words_to_search_str+=words
但这使words_to_search_str变为以下内容:
'\\"more toys\\"\\"free treats\\"'
这不是我想要的(两次反向飞溅将不起作用)。
有什么方法可以获取该字符串列表并以一个字符串结尾,但是双字母组在(转义)双引号中分别位于何处?
编辑:我想在这里的解决方案中添加一下,如果打印出来,您将得到看起来正确的对象(单个反斜杠,而不是双反斜杠),但是实际对象似乎仍然具有双反斜杠和当您传入搜索参数时,它们不会给出相同的结果...
最佳答案
如果您运行的是3.6+版本,则应该这样做:
words_to_search_list = [
"toy", "durable", "more toys", "free treats", "big durable toys"
]
words_to_search_str = '\"search\": \"' + ' '.join([
f'\\"{word}\\"' if ' ' in word else word for word in words_to_search_list
]) + '\"'
print(words_to_search_str)
如果没有,请尝试:
words_to_search_list = [
"toy", "durable", "more toys", "free treats", "big durable toys"
]
words_to_search_str = '\"search\": \"' + ' '.join([
'\\"{}\\"'.format(word) if ' ' in word else word for word in words_to_search_list
]) + '\"'
print(words_to_search_str)
关于python - 在python3中获取一个列表并放入一个字符串中,但转义双引号,以便将其作为搜索参数传递给azure搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59957427/