You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何反转字典结构:以Zendesk缺失翻译区域为键、文章ID为值

问题:反转Zendesk翻译缺失数据的字典结构

我正在使用Zendesk API生成包含文章缺失翻译信息的CSV文件。目前的流程是遍历文章ID列表构建API的GET请求:

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)

API返回的响应是对应文章ID的缺失区域列表:

{
    "locales": [
        "fr",
        "es",
        "de"   
    ],
    "default_locale": "en"
}

基于这些数据,我创建了以文章ID为键、缺失区域列表为值的字典:

base_dict = {"001":["locale1","locale2","locale3"], "002":["locale1","locale2","locale3"]}

为了让CSV对翻译人员更实用,我需要反转字典结构:以区域为键,值为该区域缺失翻译的文章ID列表,最终效果如下:

final_dict = {"locale1":["id1","id2","id3"], "locale2":["id1","id2","id3"]}

手动适配50+个区域效率极低,求高效实现方法。


解决方案

方法1:使用collections.defaultdict(简洁高效)

借助collections模块的defaultdict可以自动初始化列表类型的值,无需手动判断键是否存在:

from collections import defaultdict

base_dict = {"001":["locale1","locale2","locale3"], "002":["locale1","locale2","locale3"]}
final_dict = defaultdict(list)

# 遍历原字典,反转键值关系
for article_id, missing_locales in base_dict.items():
    for locale in missing_locales:
        final_dict[locale].append(article_id)

# 可选:将defaultdict转换为普通字典
final_dict = dict(final_dict)

方法2:使用普通字典(无需额外模块)

如果不想引入外部模块,用基础字典操作也能实现:

base_dict = {"001":["locale1","locale2","locale3"], "002":["locale1","locale2","locale3"]}
final_dict = {}

for article_id, missing_locales in base_dict.items():
    for locale in missing_locales:
        # 若区域不在字典中,先初始化空列表
        if locale not in final_dict:
            final_dict[locale] = []
        final_dict[locale].append(article_id)

生成实用的CSV文件

拿到反转后的final_dict后,可通过csv模块生成翻译人员易读的CSV,推荐两种格式:

格式1:每行一条缺失记录(便于筛选排序)

import csv

with open('missing_translations.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(['区域', '缺失翻译的文章ID'])
    for locale, article_ids in final_dict.items():
        for article_id in article_ids:
            writer.writerow([locale, article_id])

格式2:按区域分组展示(汇总视角)

import csv

with open('missing_translations_grouped.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(['区域', '缺失翻译的文章ID列表'])
    for locale, article_ids in final_dict.items():
        writer.writerow([locale, ', '.join(article_ids)])

内容的提问来源于stack exchange,提问作者Jelz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 19:40:59