如何扁平化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开始,确保第一次出现的键不需要加后缀。- 遍历原字典时,区分两种值类型:
- 嵌套字典:遍历内部的键值对,更新对应键的计数,生成带后缀(仅当计数>0时)的新键,将键值对加入结果字典。
- 普通值:如果键已存在于结果中,就生成带后缀的新键;否则直接使用原键存入结果,并初始化计数。
运行后得到的结果符合预期:
'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
相关产品推荐
相关产品推荐

