Самый эффективный способ преобразовать строку с ключами и значениями в диктант Python - PullRequest
0 голосов
/ 09 ноября 2018

Как мне преобразовать строку

{"key"=>"Number of Contents in Sales Package", "value"=>"Pack of 3"}

в словарь типа

{'Number of Contents in Sales Package':'Pack of 3'}?

Ответы [ 4 ]

0 голосов
/ 09 ноября 2018

Вот подход, который немного разбивает и очищает строку, а затем использует понимание dict с zip() на кусочках нечетных и четных элементов списка (ключи четные, значения нечетные) для генерации искомого вывода (и будет работать со строками, которые содержат несколько пар ключ-значение, но не очень хорошо, если ваши строки содержат вложенные символы, списки и т. д.).

Тем не менее, ответ от @ jpp действительно умный.

text = '{"key"=>"Number of Contents in Sales Package", "value"=>"Pack of 3"}'

items = [t.split('=>')[1].replace('"', '') for t in text[1:-1].split(',')]
result = {k: v for k, v in zip(items[::2], items[1::2])}

print(result)
# OUTPUT
# {'Number of Contents in Sales Package': 'Pack of 3'}
0 голосов
/ 09 ноября 2018

Вы можете сделать:

result = dict([k_v.replace('"', '').split('=>')
               for k_v in string[1:-1].split(', ')])

Для этого потребуется, чтобы ваши данные были в форме:

'{key1=>value1, key2=>value2}'
0 голосов
/ 09 ноября 2018

с использованием re с примером с более чем 1 парой ключ-значение

import re

s = """{"key"=>"Number of Contents in Sales Package", "value"=>"Pack of 3"}, 
    {"key"=>"Number of Contents in Sales Package 2", "value"=>"Pack of 5"}"""

pattern = re.compile(r'''{"key"=>"(?P<key>.*?)", "value"=>"(?P<value>.*?)"}''')
dict(pattern.findall(s))
{'Number of Contents in Sales Package': 'Pack of 3',
 'Number of Contents in Sales Package 2': 'Pack of 5'}
0 голосов
/ 09 ноября 2018

Вы можете использовать str.replace, а затем ast.literal_eval, чтобы преобразовать вашу строку в словарь, а затем реструктурировать:

from ast import literal_eval

x = '{"key"=>"Number of Contents in Sales Package", "value"=>"Pack of 3"}'

d = literal_eval(x.replace('=>', ':'))
d = {d['key']: d['value']}

print(d)

{'Number of Contents in Sales Package': 'Pack of 3'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...