it-swarm.com.de

Konvertieren Sie ein python -Dikt in einen String und zurück

Ich schreibe ein Programm, das Daten in einem Dictionary-Objekt speichert. Diese Daten müssen jedoch zu einem bestimmten Zeitpunkt während der Programmausführung gespeichert und beim erneuten Ausführen des Programms wieder in das Dictionary-Objekt geladen werden. Wie würde ich ein Wörterbuchobjekt in einen String konvertieren, der in eine Datei geschrieben und wieder in ein Wörterbuchobjekt geladen werden kann? Dies wird hoffentlich Wörterbücher unterstützen, die Wörterbücher enthalten.

228
AJ00200

Das json-Modul ist hier eine gute Lösung. Es hat gegenüber pickle den Vorteil, dass es nur reine Textausgaben erzeugt und plattform- und versionsübergreifend ist.

import json
json.dumps(dict)
201
Tyler Eaves

Wenn Ihr Wörterbuch nicht zu groß ist, kann str + eval die Arbeit erledigen:

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

dict2 = eval(str1)

print dict1==dict2

Sie können ast.literal_eval anstelle von eval für zusätzliche Sicherheit verwenden, wenn die Quelle nicht vertrauenswürdig ist.

190
PabloG

Ich benutze json :

import json

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

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

Verwenden Sie das Modul pickle , um es auf der Festplatte zu speichern und später zu laden.

14
ismail

Warum nicht die in Python 3 integrierte Funktion ast library literal_eval verwenden? Es ist besser, literal_eval anstelle von eval zu verwenden

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

gibt die Ausgabe als aktuelles Wörterbuch aus

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

Und wenn Sie ein Dictionary in einen String konvertieren möchten, können Sie die str () -Methode von Python verwenden.

Angenommen, das Wörterbuch lautet:

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

Und das wird so gemacht:

str(my_dict)

Wird drucken:

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

Das ist so einfach wie du willst.

9
FightWithCode

Wenn auf Chinesisch

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')
5
beta

Ich denke, Sie sollten die Verwendung des Moduls shelve in Betracht ziehen, das dauerhafte dateibasierte wörterbuchähnliche Objekte bereitstellt. Es ist einfach anstelle eines "echten" Wörterbuchs zu verwenden, da es Ihr Programm fast transparent mit etwas versorgt, das genau wie ein Wörterbuch verwendet werden kann, ohne dass es explizit in einen String konvertiert und dann in eine Datei geschrieben werden muss (oder umgekehrt). umgekehrt).

Der Hauptunterschied besteht darin, dass Sie zunächst open() vor dem ersten Gebrauch und dann close() nach dem Ende des Vorgangs (und möglicherweise sync(), abhängig von der verwendeten Option writeback) ausführen müssen. Jedes "Shelf" -Dateiobjekt, das erstellt wird, kann reguläre Wörterbücher als Werte enthalten, sodass diese logisch verschachtelt werden können.

Hier ist ein triviales Beispiel:

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()

Ausgabe:

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

Wenn Sie sich für die Geschwindigkeit interessieren, verwenden Sie json (UltraJSON), das die gleiche API wie json hat:

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

Ich benutze yaml dafür, wenn es lesbar sein soll (weder JSON noch XML sind das IMHO), oder wenn das Lesen nicht notwendig ist, benutze ich pickle.

Schreiben

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)

Lesen Sie zurück

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

Wörterbuch in JSON (String) konvertieren

import json 

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

result = json.dumps(mydict)

print(result[0:20])

werde dich holen:

{"name": "Don", "sur

String in Wörterbuch umwandeln

back_to_mydict = json.loads(result) 
1
Harvey