Как преобразовать строку в словарь в Python

В процессе автоматизации действий с помощью Selenium возникла потребность получить значение стиля, заданного в атрибуте style DOM элемента. Самое простое решение воспользоваться функцией: element.value_of_css_property. Что делать, если потребуется преобразовать строку в словарь где-то еще, как это можно красиво сделать?

Постановка задачи

Есть строка вида:

"display: none; z-index: 9999;"

Требуется ее преобразовать в словарь:

{'display': 'none', 'z-index': '9999'}

Алгоритм решения

  • Разбиваем на элементы
  • Каждый элемент разбиваем на свойство и значение
  • Сохраняем свойство и значение в словарь

Способ 1. Создание функции

def strToCssValues( sStyleValue ):
    pResult = {}
    for sPart in sStyleValue.split( ";" ):
        sPart = sPart.strip()
        
        if not sPart:
            continue;
            
        sProperty, sValue = sPart.split( ":" )
        pResult[ sProperty.strip() ] = sValue.strip()
            
    return pResult

Способ 2. Использование генераторного выражения

Генераторные выражения записываются в виде:

( выражение for j in итерируемый_объект [ if условие ] )

Будет представлено последовательное преобразование к словарю следующей строки:

sStyle = "display: none; z-index: 9999;"

Шаг 1. Разбиваем на элементы

sStyle = "display: none; z-index: 9999;"

pResult = [ sPart for sPart in sStyle.split( ";" ) if sPart ]

print( pResult )
результат преобразования строки в словарь: список подстрок

Шаг 2. Каждый элемент разбиваем на свойство и значение

sStyle = "display: none; z-index: 9999;"

pResult = [ ( sProperty, sValue ) for sProperty, sValue in ( sPart.split( ":" ) for sPart in sStyle.split( ";" ) if sPart ) ]

print( pResult )
результат преобразования строки в словарь: список кортежей

Шаг 3. Сохраняем свойство и значение в словарь

sStyle = "display: none; z-index: 9999;"

pResult = dict( ( sProperty.strip(), sValue.strip() ) for sProperty, sValue in ( sPart.split( ":" ) for sPart in sStyle.split( ";" ) if sPart ) )

print( pResult )
результат преобразования строки в словарь

Полученный в данном способе код труднее читать, так как предполагает знакомство с генераторами, генераторными выражениями, возвратом из функции нескольких значений и кортежами.