it-swarm.com.de

Konvertieren Sie das Unicode-Wörterbuch in Python

Ich habe Unicode u"{'code1':1,'code2':1}" und möchte es im Wörterbuchformat haben.

Ich möchte es im {'code1':1,'code2':1}-Format.

Ich habe unicodedata.normalize('NFKD', my_data).encode('ascii','ignore') ausprobiert, aber es gibt String nicht Wörterbuch zurück.

Kann mir jemand helfen?

41
Sudhir Arya

Sie können das integrierte ast-Paket verwenden: 

import ast

d = ast.literal_eval("{'code1':1,'code2':1}")

Hilfe zur Funktion literal_eval im Modul ast:

literal_eval (node_or_string)

Bewerten Sie einen Ausdrucksknoten oder eine Zeichenfolge, die einen Python-Ausdruck enthält, sicher. Der bereitgestellte String oder Knoten darf nur aus den folgenden Python-Literalstrukturen bestehen: Strings, Zahlen, Tupel, Listen, Dicts, Booleans und None.

74
aga

Sie können literal_eval verwenden. Möglicherweise möchten Sie auch sicherstellen, dass Sie ein Diktat erstellen und nicht etwas anderes. Verwenden Sie anstelle von assert Ihre eigene Fehlerbehandlung. 

from ast import literal_eval
from collections import MutableMapping

my_dict = literal_eval(my_str_dict)
assert isinstance(my_dict, MutableMapping)
15
pyrospade

EDIT: Es stellt sich heraus, dass meine Annahme falsch war. Da die Schlüssel nicht in doppelte Anführungszeichen (") eingeschlossen sind, ist die Zeichenfolge nicht JSON. Siehe hier .

Ich vermute, dass Sie vielleicht JSON , a.k.a. JavaScript Object Notation haben.

Sie können dazu das integrierte json-Modul von Python verwenden: 

import json
result = json.loads(u"{'code1':1,'code2':1}")   # will NOT work; see above
9
Alastair Irvine

Ich habe einen Unicode-Fehler erhalten, als ich einen Json aus einer Datei las. Also dieser hat für mich gearbeitet. 

import ast
job1 = {}
with open('hostdata2.json') as f:
  job1= json.loads(f.read())

f.close()

#print type before converting this from unicode to dic would be <type 'unicode'>

print type(job1)
job1 =  ast.literal_eval(job1)
print "printing type after ast"
print type(job1)
# this should result <type 'dict'>

for each in job1:
 print each
print "printing keys"
print job1.keys()
print "printing values"
print job1.values()
0
Meena Rajani