Подтвердить что ты не робот

Преобразование python dict в строку и обратно

Я пишу программу, которая хранит данные в объекте словаря, но эти данные должны быть сохранены в какой-то момент во время выполнения программы и загружены обратно в объект словаря при повторном запуске программы. Как преобразовать объект словаря в строку, которая может быть записана в файл и загружена обратно в объект словаря? Это, надеюсь, поддерживает словари, содержащие словари.

4b9b3361

Ответ 1

Модуль JSON является хорошим решением здесь. Он имеет преимущество перед pickle в том, что он производит только вывод простого текста, а также является кроссплатформенным и кросс-версией.

import json
json.dumps(dict)

Ответ 2

Если ваш словарь не слишком большой, возможно, str + eval может выполнить работу:

dict1 = {'one':1, 'two':2, 'three': {'three.1': 3.1, 'three.2': 3.2 }}
str1 = str(dict1)

dict2 = eval(str1)

print dict1==dict2

Вы можете использовать ast.literal_eval вместо eval для дополнительной безопасности, если источник не доверен.

Ответ 3

Я использую json:

import json

# convert to string
input = json.dumps({'id': id })

# load to dict
my_dict = json.loads(input) 

Ответ 4

Просто получить сделку с json на python

# import built-in json lib
import json

# dict to str
str_json = json.dumps({'my_key': 'my value'})

# str to dict
dict_from_str_json = json.loads('{"my_key": "my value"}')

Ответ 5

Используйте модуль pickle, чтобы сохранить его на диске и загрузить позже.

Ответ 6

Почему бы не использовать Python 3 встроенных Аста библиотеки функций literal_eval. Лучше использовать literal_eval вместо eval

import ast
str_of_dict = "{'key1': 'key1value', 'key2': 'key2value'}"
ast.literal_eval(str_of_dict)

выдаст вывод как фактический словарь

{'key1': 'key1value', 'key2': 'key2value'}

И если вы хотите преобразовать словарь в строку, как насчет использования str() метода Python.

Предположим, словарь:

my_dict = {'key1': 'key1value', 'key2': 'key2value'}

И это будет сделано так:

str(my_dict)

Напечатает:

"{'key1': 'key1value', 'key2': 'key2value'}"

Это легко, как вам нравится.

Ответ 7

Если в Chinses

import codecs
fout = codecs.open("xxx.json", "w", "utf-8")
dict_to_json = json.dumps({'text':"中文"},ensure_ascii=False,indent=2)
fout.write(dict_to_json + '\n')

Ответ 8

Я думаю, вам стоит подумать об использовании модуля shelve, который предоставляет постоянные поддерживаемые файлом словарные объекты. Он прост в использовании вместо "реального" словаря, потому что он почти прозрачно предоставляет вашей программе что-то, что можно использовать точно так же, как словарь, без необходимости явно преобразовывать его в строку и затем записывать в файл (или вице- Versa).

Основное отличие состоит в том, чтобы сначала использовать open() его перед первым использованием, а затем close() его, когда вы закончите (и, возможно, sync() его, в зависимости от используемой опции writeback). Любые создаваемые файловые объекты "полки" могут содержать регулярные словари в качестве значений, позволяя им быть логически вложенными.

Вот тривиальный пример:

import shelve

shelf = shelve.open('mydata')  # open for reading and writing, creating if nec
shelf.update({'one':1, 'two':2, 'three': {'three.1': 3.1, 'three.2': 3.2 }})
shelf.close()

shelf = shelve.open('mydata')
print shelf
shelf.close()

Вывод:

{'three': {'three.1': 3.1, 'three.2': 3.2}, 'two': 2, 'one': 1}

Ответ 9

Я использую yaml для этого, если его нужно читать (ни JSON, ни XML не являются IMHO), или если чтение не нужно, я использую pickle.

Запись

from pickle import dumps, loads
x = dict(a=1, b=2)
y = dict(c = x, z=3)
res = dumps(y)
open('/var/tmp/dump.txt', 'w').write(res)

Считывание назад

from pickle import dumps, loads
rev = loads(open('/var/tmp/dump.txt').read())
print rev

Ответ 10

Преобразовать словарь в JSON (строка)

import json 

mydict = { "name" : "Don", 
          "surname" : "Mandol", 
          "age" : 43} 

result = json.dumps(mydict)

print(result[0:20])

получит вас:

{"name": "Don", "sur

Конвертировать строку в словарь

back_to_mydict = json.loads(result) 

Ответ 11

Если вам нужна скорость, используйте ujson (UltraJSON), который имеет тот же API, что и json:

import ujson
ujson.dumps([{"key": "value"}, 81, True])
# '[{"key":"value"},81,true]'
ujson.loads("""[{"key": "value"}, 81, true]""")
# [{u'key': u'value'}, 81, True]

Ответ 12

используйте обычные методы, а не библиотеки, которые просты , Это сработало для меня

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
d=" " 
for  i in dict:
 a=i
 b=dict[i]
 c=i+":"+dict[i]
 d=d+c+'\n'

print d