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

如何修正代码以统计嵌套JSON列表中按created[年月]分组的对象数量

问题

我有一个嵌套JSON对象列表,想要生成一个以created[year-month]为键、统计数量为值的字典。我写了以下代码:

result = {}
for record in data_in:
    if record['created'][:7] not in result:
        result[record['created'][:7]] = {"created": 0}
    result[record["created"][:7]]["created"] += 1
        
result

这段代码的输出是:

{'2020-03': {'created': 1},
 '2020-04': {'created': 1},
 '2020-01': {'created': 3}}

但我期望的输出是:

{
  '2020-03': 1, 
  '2020-04': 1, 
  '2020-01': 3
}

要求重构代码或提供更优实现,不得使用额外导入模块。附JSON数据示例:

data_in =   [
    {
        "package": "FLEXIBLE",
        "created": "2020-03-10T00:00:00",
        "summary": [
            {
                "period": "2019-12",
                "documents": {
                    "incomes": 63,
                    "expenses": 13
                }
            },
            {
                "period": "2020-02",
                "documents": {
                    "incomes": 45,
                    "expenses": 81
                }
            }
        ]
    },
    {
        "package": "ENTERPRISE",
        "created": "2020-04-19T00:00:00",
        "summary": [
            {
                "period": "2020-01",
                "documents": {
                    "incomes": 15,
                    "expenses": 52
                }
            },
            {
                "period": "2020-02",
                "documents": {
                    "incomes": 76,
                    "expenses": 47
                }
            }
        ]
    },
    {
        'package': 'FLEXIBLE',
        'created': '2020-01-15T00:00:00',
        'summary': [
            {
                'period': '2020-03',
                'documents': {
                    'incomes': 39, 
                    'expenses': 48
                }
            },
            {
                'period': '2020-04', 
                'documents': {
                    'incomes': 76, 
                    'expenses': 20
                }
            }
        ]
    },
    
    {
        'package': 'INTERNAL',
        'created': '2020-01-07T00:00:00',
        'summary': [
            {
                'period': '2019-12',
                'documents': {
                    'incomes': 4, 
                    'expenses': 53
                }
            },
            {
                'period': '2020-01', 
                'documents': {
                    'incomes': 60, 
                    'expenses': 48
                }
            },
            {
                'period': '2020-02', 
                'documents': {
                    'incomes': 88, 
                    'expenses': 85
                }
            },
            {
                'period': '2020-03', 
                'documents': {
                    'incomes': 84, 
                    'expenses': 81
                }
            }
        ]
    },
    {
        'package': 'ENTERPRISE',
        'created': '2020-01-03T00:00:00',
        'summary': [
            {
                'period': '2020-04',
                'documents': {
                    'incomes': 27, 
                    'expenses': 13
                }
            }
        ]
    }]

解决方案

重构原有代码

原代码的问题是将每个月份对应的值设置为嵌套字典,只需直接用数字作为值即可:

result = {}
for record in data_in:
    month_key = record['created'][:7]
    if month_key not in result:
        result[month_key] = 0
    result[month_key] += 1

这段代码逻辑和原代码一致,去掉了不必要的嵌套字典,直接输出期望格式。

更简洁的实现

利用字典的get()方法简化判断逻辑,省去if分支:

result = {}
for record in data_in:
    month_key = record['created'][:7]
    result[month_key] = result.get(month_key, 0) + 1

get(month_key, 0)会返回对应键的值,若键不存在则返回0,一行完成计数操作,代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:55:08