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

如何扁平化Python嵌套字典并为重复键添加后缀?

扁平化Python字典并处理重复键

直接用下面的函数可以实现需求,处理嵌套字典的扁平化,同时给重复键添加数字后缀区分:

def flatten_dict(original_dict):
    flattened = {}
    key_counts = {}
    
    for key, value in original_dict.items():
        if isinstance(value, dict):
            for nested_key, nested_value in value.items():
                key_counts[nested_key] = key_counts.get(nested_key, -1) + 1
                new_key = f"{nested_key}_{key_counts[nested_key]}" if key_counts[nested_key] > 0 else nested_key
                flattened[new_key] = nested_value
        else:
            if key in flattened:
                key_counts[key] = key_counts.get(key, -1) + 1
                new_key = f"{key}_{key_counts[key]}"
                flattened[new_key] = value
            else:
                flattened[key] = value
                key_counts[key] = 0
    return flattened

# 测试示例字典
student_da = {
    'id1': {
        'name': 'mike',
        'age': 28,
        'salary': 2000
    },
    'id2': {
        'name': 'Sara',
        'age': 18,
        'salary': 1000
    },
    "a": "A",
    'id3': {
         'name': 'Omid',
         "age": 20,
         'salary': 1000
    },
    'id4': dict(name="Amir", age=28, salary=2000),
    "last_name": "messi",
}

# 获取并打印结果
flattened_result = flatten_dict(student_da)
for k, v in sorted(flattened_result.items()):
    print(f"{repr(k)}: {repr(v)}")

代码逻辑说明

  • flattened字典存储最终的扁平化结果,key_counts用来统计每个键的出现次数,初始计数从-1开始,确保第一次出现的键不需要加后缀。
  • 遍历原字典时,区分两种值类型:
    1. 嵌套字典:遍历内部的键值对,更新对应键的计数,生成带后缀(仅当计数>0时)的新键,将键值对加入结果字典。
    2. 普通值:如果键已存在于结果中,就生成带后缀的新键;否则直接使用原键存入结果,并初始化计数。

运行后得到的结果符合预期:

'a': 'A'
'age': 28
'age_1': 18
'age_2': 20
'age_3': 28
'last_name': 'messi'
'name': 'mike'
'name_1': 'Sara'
'name_2': 'Omid'
'name_3': 'Amir'
'salary': 2000
'salary_1': 1000
'salary_2': 1000
'salary_3': 2000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:27:24