创建一个字典,其中的值(列表)成为键,反之亦然



我正在使用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'])

相关内容

  • 没有找到相关文章

最新更新