Найти - Пользователи
Полная версия: сформировать словарь из строки
Начало » Python для новичков » сформировать словарь из строки
1
robisho
Добрый день. Есть список словарей

 [{'1-75 мин — Тотал (2) бол': '1.52'}, {'ФК Лос Анджелес победа и тотал (2.5) мен -4.5 ФК Лос Анджелес победа и тотал (2.5) бол -1.88': '4.5'}, {'Тотал (3.5) мен -1.62 Тотал (3.5) бол -2': '1.62'}]

Нужно, если ключ включает в себя и ‘мен’ and ‘бол’ (т.е. первый словарь не трогаем, а второй и третий словарь попадают), разбить ключ на две части и получить вместо одного
{'ФК Лос Анджелес победа и тотал (2.5) мен -4.5 ФК Лос Анджелес победа и тотал (2.5) бол -1.88': ‘4.5’}
два словаря {'ФК Лос Анджелес победа и тотал (2.5) мен': ‘4.5’} и {'ФК Лос Анджелес победа и тотал (2.5) бол: ‘4.5’ }. Спасибо.
robisho
Сделал в таком виде

 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)

вот только это работает, если значение float, если int - падает все. регулярка ‘-\d+\.\d+’ не отрабатывает этот вариант. может кто подскажет регулярку? спасибо.
Ocean
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()


py.user.next
ха) В решении 2 цикла вложенных и мне не понравилось мое прошлое решение. Стала писать тебе вопрос и поняла как можно улучшить, переделываю)









py.user.next
robisho
Добрый день. Есть список словарей
Допустим, что у тебя есть такой словарь
  
{'Тотал (3.5) мен -1.62 Тотал (3.5) бол -2': '123.456'}
Как бы ты его разбил на два словаря? Напиши эти два словаря.


Ocean
py.user.next
ха) В решении 2 цикла вложенных и мне не понравилось мое прошлое решение. Стала писать тебе вопрос и поняла как можно улучшить, переделываю)
Там нужно функцию написать, которая получает один элемент, а возвращает пару элементов. И эту функцию нужно сначала написать в виде функции-заглушки. Потом надо запустить весь код, убедиться, что он работает в таком виде, а потом уже продолжать писать внутренности функции-заглушки. Также в функции-заглушке нужно подумать про разбор строки ключа и не понадобится ли для этого ещё одна функция.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB