替换存储在词典列表中的字符串

时间:2018-05-22 07:45:43

标签: python-3.x list dictionary

我正在python3中开发一个程序,需要迭代一个字典列表,并将特定字符' - '的所有出现替换为'_'。理想情况下,我只需要在字典键中替换' - '的实例,但我可以管理

数据采用以下格式:

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')]
    }
  ]

我尝试将其替换为以下字符串:

d.replace('-','_')

但是这给了错误:

AttributeError: 'list' object has no attribute 'replace'

然后我想我会迭代列表和字典项目来尝试替换:

 for i in range(len(dicts)):
     for x in dicts[i].items():
         dicts[i].items.replace('-','_')

给了我

 AttributeError: 'builtin_function_or_method' object has no attribute 'replace'

所以现在我正在尝试

def t(dicts):
    for i in range(len(dicts)):
        for key in dicts[i].items():
            dicts[i].items()[key.replace('-','_')] = (dicts[i].items()).pop(key)

然而,这给出了错误:

AttributeError: 'dict_items' object has no attribute 'pop'    

有人知道怎么做吗?如果这是我做错了什么,那么正确的方法是什么?

1 个答案:

答案 0 :(得分:0)

首先,

for i in range(len(dicts)):
 for x in dicts[i].items():
     dicts[i].items.replace('-','_')

你得到例外,因为你试图在“items”函数中找到一个方法“replace”而不是调用函数。它应该是:

dicts[i].items().replace('-','_')

其次,对我而言,这是错误的做法。 既然你正在使用python,为什么不以pythonic的方式去做,只返回一个有新值的新dict的新列表?

下面提供的函数列出了元组列表的序列(它是您提供的结构),并将每个“to_change”替换为“change_to”。我用你的要求将每个' - '改为'_'来称呼它。

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')]
}
  ]  

def sub_string(dict_list, to_change, change_to):
    new_list = []
    for d_orig in dict_list:
        d_new = {}
        for key in d_orig.keys():
            new_key = key.replace(to_change, change_to)
            new_value = [[s.replace(to_change, change_to) for s in tup] for tup in d_orig[key]]
            d_new[new_key] = new_value

        new_list.append(d_new)
    return new_list

sub_string(d, '-', '_')

这是你的意思吗?