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

Python3替换字典列表中键的'-'为'_'的正确方法

没问题,我来帮你搞定这个字典键替换的问题!先看看你之前踩的几个坑:

  1. 你一开始用d.replace('-','_')报错,是因为d是列表,而replace()是字符串专属的方法,列表根本没有这个属性~
  2. 第二次遍历的时候,dicts[i].items是方法本身,得加括号变成dicts[i].items()才能拿到键值对集合,但就算这样,dict_items对象也没有replace方法,它可不是字符串哦。
  3. 第三次尝试里,dict_items是一个视图对象,不支持pop操作,而且items()[key]这种写法也不对,你应该直接操作字典本身,而不是它的items视图。

接下来给你两种靠谱的实现方式,按需选择:

方法一:创建新的字典列表(推荐,更安全)

这种方式不会修改原数据,而是生成一个全新的列表,避免后续操作影响原数据:

d = [
    {
        'title': [('Agente 007, Moonraker: Operazione spazio', 'it')],
        'sub-title': [('Missione nel cosmo per...', 'it')],
    },
    {
        'title': [('Agente 007, Vivi e lascia morire', 'it')],
        'sub-title': [('Il primo James Bond con...', 'it')]
    }
]

# 用字典推导式生成每个新字典,再收集到新列表里
new_d = []
for original_dict in d:
    # 遍历原字典的键值对,替换键中的'-'为'_'
    updated_dict = {key.replace('-', '_'): value for key, value in original_dict.items()}
    new_d.append(updated_dict)

# 输出结果
print(new_d)

运行后,你会看到所有sub-title都变成了sub_title,值完全保留不变。

方法二:原地修改原字典(适合需要保留原列表对象的场景)

如果必须修改原始的列表和字典,可以这么做——注意要先把原字典的键存成列表,避免遍历过程中字典结构变化导致的问题:

for original_dict in d:
    # 先把所有原键转成列表,防止遍历字典时修改键引发异常
    original_keys = list(original_dict.keys())
    for key in original_keys:
        if '-' in key:
            new_key = key.replace('-', '_')
            # 将原键对应的值赋给新键,再删除原键
            original_dict[new_key] = original_dict.pop(key)

# 现在原列表d已经被修改了
print(d)

额外说明

如果你之后需要处理值中的'-'(比如值里的字符串也需要替换),可以再递归处理值,但根据你的描述,只需要处理键的话,上面两种方法完全够用啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:20:33