如何将Python字典中的ID拼接为逗号分隔字符串用于Zendesk批量更新?
如何构造Zendesk批量更新的多ID URL?
你遇到的问题很典型——循环里每次给id_merged赋值单个ID,导致变量被不断覆盖,最后只留下最后一个工单ID。要实现像https://propertypro.zendesk.com/api/v2/tickets/update_many.json?ids=4249,4089这样的URL,我们需要先收集所有工单ID,再把它们拼接成逗号分隔的字符串。
解决步骤
收集所有工单ID到列表
先从搜索结果的data['results']里提取所有ID,存到一个列表中:ticket_ids = [result['id'] for result in data['results']]这行代码用列表推导式快速遍历所有结果,把每个工单的
id提取出来,得到类似[4249, 4089]的列表。将列表转为逗号分隔的字符串
因为URL里需要的是字符串形式的4249,4089,所以我们把列表里的数字转成字符串后用逗号拼接:id_merged = ','.join(map(str, ticket_ids))map(str, ticket_ids)把列表里的每个数字转成字符串','.join(...)用逗号把这些字符串连接起来,得到最终需要的ID字符串
优化批量更新代码
原来的代码循环每个ID单独发请求,其实Zendesk的update_manyAPI支持一次更新多个工单,完全不需要循环。优化后的完整代码如下:from test_search import data import json import requests # 收集所有需要更新的工单ID ticket_ids = [result['id'] for result in data['results']] id_merged = ','.join(map(str, ticket_ids)) print("**Start**") print(f"准备更新的工单ID:{id_merged}") body = 'Test ticket' # 构造批量更新的请求数据 data_comment = {'ticket': {'comment': {'body': body}}} payload = json.dumps(data_comment) # 构造带多ID的批量更新URL url = f'https://propertypro.zendesk.com/api/v2/tickets/update_many.json?ids={id_merged}' user = 'some email' pwd = 'some password' headers = {'content-type': 'application/json'} # 发送一次批量更新请求 response = requests.put(url, data=payload, auth=(user, pwd), headers=headers) # 检查请求状态 if response.status_code != 200: print('Status:', response.status_code, 'Problem with the request. Exiting.') exit() # 输出成功提示 print(f'Successfully added comment to tickets #{id_merged}')
为什么原来的代码不行?
你之前的循环里,每次执行id_merged = (result['id'])都会把新的单个ID覆盖掉之前的值,所以最后id_merged只会保留最后一个遍历到的ID。而我们需要先把所有ID收集起来,再统一拼接,这样才能得到所有ID组成的字符串。
另外,用批量更新API只需要发送一次请求,比循环发送多次请求更高效,也更符合Zendesk API的设计意图。
内容的提问来源于stack exchange,提问作者Adnan Zahry
相关产品推荐
相关产品推荐

