如何动态统计字典中相同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
相关产品推荐
相关产品推荐

