Разделение строки, разделенной точкой с запятой, на словарь, в Python

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

"Name1=Value1;Name2=Value2;Name3=Value3" 

Есть ли встроенный класс / функция в Python, который примет эту строку и построит словарь, как если бы я это сделал:

 dict = { "Name1": "Value1", "Name2": "Value2", "Name3": "Value3" } 

Я просмотрел доступные модули, но не могу найти ничего, что соответствует.


Спасибо, я действительно знаю, как сделать соответствующий код сам, но так как такие маленькие решения, как правило, ждут мои минные поля (т. Е. Кто-то пишет: Name1 = 'Value1 = 2';) и т. Д., Тогда я обычно предпочитаю некоторые пре- проверенная функция.

Тогда я сделаю это сам.

5 Solutions collect form web for “Разделение строки, разделенной точкой с запятой, на словарь, в Python”

Там нет встроенного, но вы можете сделать это достаточно просто с помощью генератора:

 s= "Name1=Value1;Name2=Value2;Name3=Value3" dict(item.split("=") for item in s.split(";")) 

[Изменить] Из вашего обновления вы указываете, что вам может потребоваться обработать цитирование. Это усложняет ситуацию, в зависимости от того, какой именно формат вы ищете (какие символы символов принимаются, какие символы эвакуации и т. Д.). Вы можете посмотреть модуль csv, чтобы узнать, может ли он охватывать ваш формат. Вот пример: (Обратите внимание, что API для этого примера немного неуклюжий, поскольку CSV предназначен для повторения последовательности записей, поэтому вызовы .next (), которые я делаю, просто смотрят на первую строку. удовлетворить ваши потребности):

 >>> s = "Name1='Value=2';Name2=Value2;Name3=Value3" >>> dict(csv.reader([item], delimiter='=', quotechar="'").next() for item in csv.reader([s], delimiter=';', quotechar="'").next()) {'Name2': 'Value2', 'Name3': 'Value3', 'Name1': 'Value1=2'} 

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

Это приближается к тому, что вы хотели:

 >>> import urlparse >>> urlparse.parse_qs("Name1=Value1;Name2=Value2;Name3=Value3") {'Name2': ['Value2'], 'Name3': ['Value3'], 'Name1': ['Value1']} 

Это может быть просто сделано путем объединения строк и списка

','. join (['% s =% s'% x для x в d.items ()])

 >>d = {'a':1, 'b':2} >>','.join(['%s=%s'%x for x in d.items()]) >>'a=1,b=2' 

Если значение Value1, Value2 является просто заполнителем для действительных значений, вы также можете использовать функцию dict() в сочетании с eval() .

 >>> s= "Name1=1;Name2=2;Name3='string'" >>> print eval('dict('+s.replace(';',',')+')') {'Name2: 2, 'Name3': 'string', 'Name1': 1} 

Это означает, что функция dict() понимает синтаксис dict(Name1=1, Name2=2,Name3='string') . Пробелы в строке (например, после каждой точки с запятой) игнорируются. Но обратите внимание, что строковые значения требуют котировки.

 easytiger $ cat test.out test.py | sed 's/^/ /' p_easytiger_quoting:1.84563302994 {'Name2': 'Value2', 'Name3': 'Value3', 'Name1': 'Value1'} p_brian:2.30507516861 {'Name2': 'Value2', 'Name3': "'Value3'", 'Name1': 'Value1'} p_kyle:7.22536420822 {'Name2': ['Value2'], 'Name3': ["'Value3'"], 'Name1': ['Value1']} import timeit import urlparse s = "Name1=Value1;Name2=Value2;Name3='Value3'" def p_easytiger_quoting(s): d = {} s = s.replace("'", "") for x in s.split(';'): k, v = x.split('=') d[k] = v return d def p_brian(s): return dict(item.split("=") for item in s.split(";")) def p_kyle(s): return urlparse.parse_qs(s) print "p_easytiger_quoting:" + str(timeit.timeit(lambda: p_easytiger_quoting(s))) print p_easytiger_quoting(s) print "p_brian:" + str(timeit.timeit(lambda: p_brian(s))) print p_brian(s) print "p_kyle:" + str(timeit.timeit(lambda: p_kyle(s))) print p_kyle(s) 
  • Как разбить строку на целые числа в Python?
  • Получить последний столбец после операции .str.split () в столбце в pandas DataFrame
  • Как разделить строку на непечатаемый символ ascii в Python
  • Сортировка и размещение списка с использованием панд
  • TypeError: split () не принимает аргументы ключевых слов
  • Python: Как именно вы можете взять строку, разделить ее, отменить ее и снова объединить?
  • Python shlex.split (), игнорировать одиночные кавычки
  • Что случилось с shlex.split?
  • Python - лучший язык программирования в мире.