Python3替换字典列表中键的'-'为'_'的正确方法
没问题,我来帮你搞定这个字典键替换的问题!先看看你之前踩的几个坑:
- 你一开始用
d.replace('-','_')报错,是因为d是列表,而replace()是字符串专属的方法,列表根本没有这个属性~ - 第二次遍历的时候,
dicts[i].items是方法本身,得加括号变成dicts[i].items()才能拿到键值对集合,但就算这样,dict_items对象也没有replace方法,它可不是字符串哦。 - 第三次尝试里,
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
相关产品推荐
相关产品推荐

