Форум сайта python.su
Добрый день. Есть список словарей
[{'1-75 мин — Тотал (2) бол': '1.52'}, {'ФК Лос Анджелес победа и тотал (2.5) мен -4.5 ФК Лос Анджелес победа и тотал (2.5) бол -1.88': '4.5'}, {'Тотал (3.5) мен -1.62 Тотал (3.5) бол -2': '1.62'}]
Отредактировано robisho (Июль 29, 2021 09:13:57)
Офлайн
Сделал в таком виде
data = [{'Сан-Франциско Джайентс (1.5) мен -2.35 Сан-Франциско Джайентс (1.5) бол -1.45': '2.35'}, {'Лос-Анджелес Доджерс (6.5) мен -2.9 Лос-Анджелес Доджерс (6.5) бол -1.62': '2'}, {'П1 в 4-м иннинге': '4.25'}, {'П1 и тотал (7.5) мен -4.8 П1 и тотал (7.5) бол -2.6': '4.8'}, {'П2 и тотал (7.5) мен -4.05 П2 и тотал (7.5) бол -2.9': '4.05'}, {'Лос-Анджелес Энджелс победа и тотал (8.5) мен -3.75 Лос-Анджелес Энджелс победа и тотал (8.5) бол -2.55': '3.0'},]
def get_pair_keys(string): pattern = re.compile(r'-\d+\.\d+') str_list = string.split() koef_l = [] for i, s in enumerate(str_list): a = re.findall(pattern, s) if a: a = a[0].replace('-', '') data = (i, a) koef_l.append(data) data1, data2 = {}, {} ind1 = koef_l[0][0] ind2 = koef_l[1][0] k1 = str_list[:ind1] k1 = ' '.join(k1) data1[k1] = koef_l[0][1] k2 = str_list[ind1+1:-1] k2 = ' '.join(k2) data2[k2] = koef_l[1][1] return (data1, data2)
for d in data: for key, val in d.items(): if ('мен' in key) and ('бол' in key): string = get_pair_keys(key) print(string)
Офлайн
robisho
Можно искать подстроку в строке и получится рабочее решение без re
если честно, я не очень разобралась у тебя в коде и нужно ли тебе результат одним словарем все данные или двумя отдельными, сделала все в один словарь
def split_keys(data): splitted_keys = {} for item in data: for keys, value in item.items(): if ' мен ' in keys and ' бол ' in keys: splitted_data = keys.split(' мен ') splitted_keys.update({splitted_data[0] + " мен": value}) splitted_keys.update({splitted_data[0] + " бол": value}) else: splitted_keys.update({keys: value}) return splitted_keys def main(): data = [{'Сан-Франциско Джайентс (1.5) мен -2.35 Сан-Франциско Джайентс (1.5) бол -1.45': '2.35'}, {'Лос-Анджелес Доджерс (6.5) мен -2.9 Лос-Анджелес Доджерс (6.5) бол -1.62': '2'}, {'П1 в 4-м иннинге': '4.25'}, {'П1 и тотал (7.5) мен -4.8 П1 и тотал (7.5) бол -2.6': '4.8'}, {'П2 и тотал (7.5) мен -4.05 П2 и тотал (7.5) бол -2.9': '4.05'}, {'Лос-Анджелес Энджелс победа и тотал (8.5) мен -3.75 Лос-Анджелес Энджелс победа и тотал (8.5) бол -2.55': '3.0'} ] splitted_keys = split_keys(data) print(splitted_keys) if __name__ == "__main__": main()
Отредактировано Ocean (Июль 30, 2021 11:55:37)
Офлайн
robishoДопустим, что у тебя есть такой словарь
Добрый день. Есть список словарей
{'Тотал (3.5) мен -1.62 Тотал (3.5) бол -2': '123.456'}
OceanТам нужно функцию написать, которая получает один элемент, а возвращает пару элементов. И эту функцию нужно сначала написать в виде функции-заглушки. Потом надо запустить весь код, убедиться, что он работает в таком виде, а потом уже продолжать писать внутренности функции-заглушки. Также в функции-заглушке нужно подумать про разбор строки ключа и не понадобится ли для этого ещё одна функция.
py.user.next
ха) В решении 2 цикла вложенных и мне не понравилось мое прошлое решение. Стала писать тебе вопрос и поняла как можно улучшить, переделываю)
Отредактировано py.user.next (Июль 31, 2021 05:12:51)
Офлайн