Заменить строку, хранящуюся в списке словарей - PullRequest
0 голосов
/ 22 мая 2018

Я занимаюсь разработкой программы на 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 голосов
/ 22 мая 2018

Во-первых,

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

вы получаете исключение, потому что вы пытаетесь найти метод "replace" в функции "items", а не вызов функции .должно быть:

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

Во-вторых, для меня это неправильный подход.Поскольку вы используете python, почему бы не сделать это питонским способом и просто вернуть новый список новых dicts, которые имеют новые значения?

Функция, представленная ниже, берет список подсказок списков кортежей (это структура, которую вы предоставили) и заменяет каждый «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, '-', '_')

Это то, что вы имели в виду?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...