Ich versuche, ein Python-Wörterbuch zu erstellen, das als Java-Skript var in einer HTML-Datei zu Visualisierungszwecken verwendet werden soll. Als Voraussetzung muss das Wörterbuch mit allen Namen in doppelten Anführungszeichen anstelle der von Python verwendeten Standard-Anführungszeichen erstellt werden. Gibt es eine einfache und elegante Möglichkeit, dies zu erreichen?
couples = [
['jack', 'ilena'],
['arun', 'maya'],
['hari', 'aradhana'],
['bill', 'samantha']]
pairs = dict(couples)
print pairs
Generierte Ausgabe:
{'arun': 'maya', 'bill': 'samantha', 'jack': 'ilena', 'hari': 'aradhana'}
Erwartete Ausgabe:
{"arun": "maya", "bill": "samantha", "jack": "ilena", "hari": "aradhana"}
Ich weiß, json.dumps(pairs)
macht den Job, aber das Wörterbuch als Ganzes wird in eine Zeichenfolge konvertiert, die nicht das ist, was ich erwarte.
PS: Gibt es eine alternative Möglichkeit, dies mit json zu tun, da es sich um verschachtelte Wörterbücher handelt?
python
python-2.7
dictionary
python-3.x
Shankar
quelle
quelle
json.dumps(pairs)
Fall ist. Das OP zeigt ein grundlegendes Missverständnis, das er / sie sagte "aber das Wörterbuch als Ganzes wird in eine Zeichenfolge umgewandelt, die nicht das ist, was ich erwarte." Wenn Sie ein Objekt drucken, wird das Objekt unabhängig davon, wie Sie es drucken, zunächst in eine Zeichenfolge konvertiert.Antworten:
Sie können Ihre eigene Version eines Diktats mit Spezialdruck erstellen, indem Sie Folgendes verwenden
json.dumps()
:>>> import json >>> class mydict(dict): def __str__(self): return json.dumps(self) >>> couples = [['jack', 'ilena'], ['arun', 'maya'], ['hari', 'aradhana'], ['bill', 'samantha']] >>> pairs = mydict(couples) >>> print pairs {"arun": "maya", "bill": "samantha", "jack": "ilena", "hari": "aradhana"}
Sie können auch iterieren:
>>> for el in pairs: print el arun bill jack hari
quelle
json.dumps()
ist das, was Sie hier wollen, wenn Sie verwenden, erhaltenprint json.dumps(pairs)
Sie Ihre erwartete Ausgabe:>>> pairs = {'arun': 'maya', 'bill': 'samantha', 'jack': 'ilena', 'hari': 'aradhana'} >>> print pairs {'arun': 'maya', 'bill': 'samantha', 'jack': 'ilena', 'hari': 'aradhana'} >>> import json >>> print json.dumps(pairs) {"arun": "maya", "bill": "samantha", "jack": "ilena", "hari": "aradhana"}
quelle
dict
Typobjektausgabe möchte, in der die Zeichenfolgenschlüssel in doppelten Anführungszeichen stehen?json.dumps
wird das Wörterbuch in einen String konvertieren, obwohl es mit doppelten Anführungszeichen gut aussieht,type(json.dumps(pairs))
ist ein String, ich glaube nicht, dass dies das ist, was OP erwartet# do not use this until you understand it import json class doubleQuoteDict(dict): def __str__(self): return json.dumps(self) def __repr__(self): return json.dumps(self) couples = [ ['jack', 'ilena'], ['arun', 'maya'], ['hari', 'aradhana'], ['bill', 'samantha']] pairs = doubleQuoteDict(couples) print pairs
Ausbeuten:
{"arun": "maya", "bill": "samantha", "jack": "ilena", "hari": "aradhana"}
quelle
Hier ist eine Basisversion
print
:>>> print '{%s}' % ', '.join(['"%s": "%s"' % (k, v) for k, v in pairs.items()]) {"arun": "maya", "bill": "samantha", "jack": "ilena", "hari": "aradhana"}
quelle
pairs
und führen Sie diese Zeile erneut aus.Die Prämisse der Frage ist falsch:
I know, json.dumps(pairs) does the job, but the dictionary as a whole is converted into a string which isn't what I am expecting.
Sie sollten eine Konvertierung in eine Zeichenfolge erwarten. Alles, was "print" tut, ist, ein Objekt in eine Zeichenfolge zu konvertieren und es an die Standardausgabe zu senden.
Wenn Python sieht:
print somedict
Was es wirklich tut, ist:
sys.stdout.write(somedict.__str__()) sys.stdout.write('\n')
Wie Sie sehen, wird das Diktat immer in eine Zeichenfolge konvertiert (schließlich ist eine Zeichenfolge der einzige Datentyp, den Sie an eine Datei wie stdout senden können ).
Die Steuerung der Konvertierung in eine Zeichenfolge kann entweder durch Definieren von __str__ für ein Objekt (wie es die anderen Befragten getan haben) oder durch Aufrufen einer hübschen Druckfunktion wie z
json.dumps()
. Obwohl beide Methoden den gleichen Effekt beim Erstellen einer zu druckenden Zeichenfolge haben, bietet die letztere Technik viele Vorteile (Sie müssen kein neues Objekt erstellen, sie gilt rekursiv für verschachtelte Daten, sie ist Standard, sie ist in C für geschrieben Geschwindigkeit, und es ist bereits gut getestet).Das Postskriptum verfehlt immer noch den Punkt:
P.S.: Is there an alternate way to do this with using json, since I am dealing with nested dictionaries.
Warum so hart arbeiten, um das JSON- Modul zu vermeiden ? So gut wie jede Lösung für das Problem des Druckens verschachtelter Wörterbücher mit doppelten Anführungszeichen wird neu erfinden, was json.dumps () bereits tut.
quelle
Das Problem, das mich mehrfach beschäftigt hat, ist beim Laden einer JSON-Datei.
import json with open('json_test.json', 'r') as f: data = json.load(f) print(type(data), data) json_string = json.dumps(data) print(json_string)
Ich übergebe versehentlich Daten an eine Funktion, die eine JSON-Zeichenfolge möchte, und erhalte die Fehlermeldung, dass ein einfaches Anführungszeichen nicht gültig ist. Ich überprüfe die Eingabe-JSON-Datei erneut und sehe die doppelten Anführungszeichen. Dann kratzte ich mir eine Minute am Kopf.
Das Problem ist, dass Daten ein Diktat und keine Zeichenfolge sind, aber wenn Python sie für Sie konvertiert, ist sie NICHT gültig.
<class 'dict'> {'bill': 'samantha', 'jack': 'ilena', 'hari': 'aradhana', 'arun': 'maya'} {"bill": "samantha", "jack": "ilena", "hari": "aradhana", "arun": "maya"}
Wenn der JSON gültig ist und das Diktat vor der Konvertierung in einen String nicht verarbeitet werden muss, laden Sie ihn einfach, während der String den Trick ausführt.
with open('json_test.json', 'r') as f: json_string = f.read() print(json_string)
quelle
Es ist einfach, nur 2 Schritte
step1:converting your dict to list step2:iterate your list and convert as json .
Zum besseren Verständnis überprüfen Sie unten das Snippet
import json couples = [ ['jack', 'ilena'], ['arun', 'maya'], ['hari', 'aradhana'], ['bill', 'samantha']] pairs = [dict(couples)]#converting your dict to list print(pairs) #iterate ur list and convert as json for x in pairs: print("\n after converting: \n\t",json.dumps(x))#json like structure
quelle