Вы можете использовать ast.literal_eval()
или json.loads()
, в этом случае выходной сигнал практически одинаков.Для JSON вы должны заключить строки в квадратные скобки, потому что они оба содержат два словаря, разделенных запятой, поэтому единственный разумный способ получить их - это список словарей.Для литералов Python исключение квадратных скобок (или замена их скобками) приводит к тому, что каждая пара словарей, разделенных запятой, интерпретируется как 2-кортеж (должен быть двойным, но это уже имеет другое значение).
Я лично рекомендую использовать json.loads()
, потому что JSON в настоящее время является наиболее используемым форматом для обмена данными в новых проектах.Было бы лучше, если бы источник ваших строк мог добавить квадратные скобки, чтобы получить действительный JSON.
import ast
import json
d = {741178: u'{"width":37.8365,"height":150,"length":234},{"width":35.7,"height":178,"length":122}',
741179: u'{"width":98.67,"height":180,"length":994},{"width":98.79,"height":167.8,"length":154.22}'}
p = {k: ast.literal_eval(v) for k, v in d.items()}
j = {k: json.loads('['+v+']') for k, v in d.items()}
print(p)
print(j)
# {741178: ({'width': 37.8365, 'height': 150, 'length': 234}, {'width': 35.7, 'height': 178, 'length': 122}), 741179: ({'width': 98.67, 'height': 180, 'length': 994}, {'width': 98.79, 'height': 167.8, 'length': 154.22})}
# {741178: [{'width': 37.8365, 'height': 150, 'length': 234}, {'width': 35.7, 'height': 178, 'length': 122}], 741179: [{'width': 98.67, 'height': 180, 'length': 994}, {'width': 98.79, 'height': 167.8, 'length': 154.22}]}
Как видите, единственная разница - ( )
⟷ [ ]