Как развернуть строку внутри строки в python?

у меня есть строка, которая выглядит так:

1 | xxx | xxx | xxx | yyy*a*b*c | xxx

Я хочу расширить yyy*a*b*c часть так, чтобы строка выглядела так:

1 | xxx | xxx | xxx | yyya | yyyb | yyyc | xxx

у меня есть большой файл с разделителем между этими строками. Я проанализировал файл в словаре, который выглядит следующим образом:

{'1': ['xxx' , 'xxx', 'xxx', 'yyy*a*b*c', 'xxx' ], '2': ['xxx*d*e*f', ...,  'zzz'], etc}

и мне нужно что yyy*a*b*c и xxx*d*e*f часть заменить дополнительными элементами в списке.

как я могу это сделать в python 3? Я должен расширить все в строке до того, как я разберу ее в словарь или после того, как я разберу ее в словарь (и как)?

3 ответов


вы можете сделать это, используя разделение и простое понимание списка:

def expand_input(input):
    temp = input.split("*")
    return [temp[0]+x for x in temp[1:]]

print(expand_input("yyy*a*b*c"))
>>> ['yyya', 'yyyb', 'yyyc']

вы должны делать это при разборе данных из файла, просто передайте каждый из аргументов через эту функцию при добавлении в список, добавив в @tuananh ответ : -

def expand_input(input):
    temp = input.split("*")
    return [temp[0]+x for x in temp[1:]] if len(temp)>1 else input

process возьму в список, как:

['xxx', 'xxx', 'yyy*a*b*c', 'xxx*d*e*f']

и верните полный список с правильными расширенными терминами:

def expand(s):
    """
    expand('yyy*a*b*c') --> ['yyya', 'yyyb', 'yyyc']
    expand('xxx') --> ['xxx']
    """

    if "*" not in s:
        return s
    base, suffixes = s.split("*")
    return [base + suffix for suffix in suffixes]

def process(strings):
    result = []
    for s in strings:
        result.extend(s)
    return result