我正在使用Zendesk的一个API创建一个csv文件,其中包含缺失的文章翻译。
API GET请求url是通过在文章ID列表中循环创建的。
article_ids = [001, 002, 003]
def get_missing_translations_per_article(id):
url = base_url + f"/api/v2/help_center/articles/{id}/translations/missing"
response = requests.get(url, auth = (user, pwd))
json = response.json()
for id in article_ids:
get_missing_translations_per_article(id)
响应是文章ID缺少的区域设置列表。
{
"locales": [
"fr",
"es",
"de",
],
"default_locale": "en"
}
用这些数据创建了一个字典。。。
data = json["locales"]
dict = {}
dict["id"] = id
dict["missing_locales"] = data
result.append(dict)
其中键是文章ID,值是缺少的区域设置的列表。格式如下:
base_dict = {"001":["locale1","locale2","locale3"], "002":["locale1","locale2","locale3"]}
为了让csv对每个翻译者来说都更实用,我想颠倒上面提到的词典的逻辑。这意味着关键字将是区域设置,值将是缺少区域设置的文章ID的列表:
final_dict = {"locale1":["id1","id2","id3"], "locale2":["id1","id2","id3"]}
我觉得创建第一个字典(base_dict(的逻辑有缺陷,所以我尝试创建一个字典列表,看起来是这样的:
list = [{'id': 001, 'missing': 'fr'}, {'id': 002, 'missing': 'fr'}, {'id': 001, 'missing': 'es'}, {'id': 001, 'missing': 'de'}, {'id': 002, 'missing': 'es'}, {'id': 003, 'missing': 'de'}]
以下代码将为未翻译为"fr"语言环境的文章创建dict:
final_dict = {}
for elem in list:
missing = []
if elem['missing'] == 'fr':
missing.append(elem['id'])
final_dict['fr'] = missing
问题是可能有50多个不同的地方,手动重复上面的逻辑似乎适得其反。
这里的正确方法是什么?
通常,您不应该使用像list
这样的内置名称作为变量(以下代码需要内置list
(。所以我把它改名为data
。
无论如何,使用defaultdict
可以通过以下方式轻松解决此问题:
from collections import defaultdict
final_dict = defaultdict(list)
for elem in data:
final_dict[elem['missing']].append(elem['id'])