我在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/

10-14 17:57
查看更多