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

Python高效实现:为空值字典键替换为嵌套字典

问题描述

现有一个字典存在键已存在但值为空的情况,示例字典:

dct = {'ID': '', 'gender': 'male', 'age': '20', 'weight': '', 'height': '5.7'}

需要将其转换为:

dct = {'ID': {'link': '','value': ''}, 'gender': 'male', 'age': '20', 'weight': {'link': '','value': ''}, 'height': '5.7'}

要求把值为空的ID和weight键替换为指定嵌套字典,寻求最具时间效率的实现方式。尝试过以下代码:

def update(orignal, addition):
    for k, v in addition.items():
        if k not in orignal:
            orignal[k] = v
        else:
            if isinstance(v, dict):
                update(orignal[k], v)
            elif isinstance(v, list):
                for i in range(len(v)):
                    update(orignal[k][i], v[i])
            else:
                if not orignal[k]:
                    orignal[k] = v

运行时出现错误:TypeError: 'str' object does not support item assignment。

高效实现方案

错误原因

你的代码出错是因为当original[k]是空字符串(比如ID对应的''),你尝试调用update(original[k], v)时,空字符串是不可变的str类型,没法像字典那样做item赋值,所以报错。

最优实现(O(n)时间复杂度)

直接遍历原字典的键值对,对目标键(ID、weight)且值为空的情况进行替换,这是时间效率最高的方式,只需要一次遍历:

def transform_dict(dct):
    # 定义要替换的目标键和对应的嵌套字典
    target_keys = {'ID', 'weight'}
    replacement = {'link': '', 'value': ''}
    for k, v in dct.items():
        if k in target_keys and v == '':
            dct[k] = replacement.copy()  # 用copy避免所有键共享同一个字典对象
    return dct

# 测试示例
dct = {'ID': '', 'gender': 'male', 'age': '20', 'weight': '', 'height': '5.7'}
transformed_dct = transform_dict(dct)
print(transformed_dct)

代码说明

  • 时间复杂度O(n),n是字典的键数量,一次遍历完成所有操作,效率拉满。
  • 用replacement.copy()是为了防止所有目标键指向同一个字典实例,后续修改其中一个时不会影响其他。
  • 如果不想原地修改原字典,可以先创建副本再操作,比如new_dct = dct.copy(),再遍历new_dct。

要是需要动态指定目标键和替换内容,也可以把它们作为参数传入函数:

def transform_dict(dct, target_keys, replacement):
    for k, v in dct.items():
        if k in target_keys and v == '':
            dct[k] = replacement.copy()
    return dct

# 调用示例
dct = {'ID': '', 'gender': 'male', 'age': '20', 'weight': '', 'height': '5.7'}
result = transform_dict(dct, {'ID', 'weight'}, {'link': '', 'value': ''})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:50:43