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

如何动态统计字典中相同DocumentCode的出现次数

动态统计DocumentCode出现次数的实现方案

需求说明

需要统计输入字典中不同DocumentCode的出现次数,要求无需硬编码,能自动识别所有动态变化的DocumentCode,最终输出各代码对应计数的字典结构。

输入数据

ldct_input_body = {
  "ContextKey": "Mr.Dave",
  "Input": [
    {
      "DocumentCode": "BS",
      "FileName": "SomethingOne",
      "Object": "base64",
      "ObjectFormat": "pdf"
    },
    {
      "DocumentCode": "BS",
      "FileName": "SomethingTwo",
      "Object": "base64",
      "ObjectFormat": "pdf"
    },
    {
      "DocumentCode": "SS",
      "FileName": "SomethingTwo",
      "Object": "base64",
      "ObjectFormat": "pdf"
    },
    {
      "DocumentCode": "F16",
      "FileName": "SomethingTwo",
      "Object": "base64",
      "ObjectFormat": "pdf"
    }
  ]
}

现有代码

提取DocumentCode列表的代码

ldct_document_code = dict()
ldct_document_code['ObjectEntries'] = []

for lstr_multiple_input_object in ldct_input_body["Input"]:
    ldct_document_code['ObjectEntries'].append(lstr_multiple_input_object['DocumentCode'])

硬编码统计代码(需替换为动态实现)

for lstr_multiple_input_object in ldct_input_body["Input"]:
    if lstr_multiple_input_object["DocumentCode"] == "BS":
        lint_bank_statement_count += 1
        lint_total_no_of_object += 1
    elif lstr_multiple_input_object["DocumentCode"] == "F16":
        lint_form_16_count += 1
        lint_total_no_of_object += 1
    elif lstr_multiple_input_object["DocumentCode"] == "SS":
        lint_salary_slip_count += 1
        lint_total_no_of_object += 1

动态统计实现方案

方案1:基础字典循环统计

无需导入额外模块,手动维护计数:

ldct_document_code = {"ObjectEntries": {}}
for item in ldct_input_body["Input"]:
    doc_code = item["DocumentCode"]
    # 检查当前代码是否已在计数字典中,存在则加1,不存在则初始化为1
    if doc_code in ldct_document_code["ObjectEntries"]:
        ldct_document_code["ObjectEntries"][doc_code] += 1
    else:
        ldct_document_code["ObjectEntries"][doc_code] = 1

方案2:使用collections.defaultdict

借助defaultdict简化初始化逻辑:

from collections import defaultdict

ldct_document_code = {"ObjectEntries": defaultdict(int)}
for item in ldct_input_body["Input"]:
    doc_code = item["DocumentCode"]
    ldct_document_code["ObjectEntries"][doc_code] += 1

# 可选:将defaultdict转换为普通字典(如果需要严格匹配预期输出格式)
ldct_document_code["ObjectEntries"] = dict(ldct_document_code["ObjectEntries"])

方案3:使用collections.Counter(最简洁)

利用Counter直接统计列表中元素的出现次数:

from collections import Counter

# 先提取所有DocumentCode到列表
doc_code_list = [item["DocumentCode"] for item in ldct_input_body["Input"]]
# 用Counter统计后转成普通字典,包装成要求的结构
ldct_document_code = {"ObjectEntries": dict(Counter(doc_code_list))}

预期输出

{
  "ObjectEntries": {
    "BS": 2,
    "SS": 1,
    "F16": 1
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:35:17