Converteer unicode-tekenreekswoordenboek in woordenboek in python

Ik heb unicode u"{'code1':1,'code2':1}"en ik wil het in woordenboekformaat.

Ik wil het in de indeling {'code1':1,'code2':1}.

Ik heb unicodedata.normalize('NFKD', my_data).encode('ascii','ignore')geprobeerd, maar het geeft een string terug, geen woordenboek.

Kan iemand me helpen?


Antwoord 1, autoriteit 100%

U kunt het ingebouwde astpakket gebruiken:

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

Help bij functie literal_eval in module ast:

literal_eval(node_or_string)

Evalueer veilig een expressieknooppunt of een tekenreeks die een Python-expressie bevat. De opgegeven string of node mag alleen bestaan ​​uit de volgende letterlijke structuren van Python: strings, getallen, tupels, lijsten, dicts, booleans en Geen.


Antwoord 2, autoriteit 18%

Je kunt literal_evalgebruiken. Misschien wilt u er ook zeker van zijn dat u een dictaat maakt en niet iets anders. Gebruik in plaats van assertuw eigen foutafhandeling.

from ast import literal_eval
from collections import MutableMapping
my_dict = literal_eval(my_str_dict)
assert isinstance(my_dict, MutableMapping)

Antwoord 3, autoriteit 13%

EDIT: mijn veronderstelling bleek onjuist te zijn; omdat de sleutels niet tussen dubbele aanhalingstekens (“) staan, is de tekenreeks geen JSON. Kijk hiervoor een aantal manieren om dit te omzeilen.

Ik vermoed dat wat je hebt, JSONis, oftewel JavaScript Object Notation.

U kunt hiervoor de ingebouwde json-module van Python gebruiken:

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

Antwoord 4, autoriteit 2%

Ik kreeg een unicode-fout toen ik een json uit een bestand aan het lezen was. Dus deze werkte voor mij.

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

Antwoord 5

U kunt de ingebouwde functie evalgebruiken om de string naar een python-object te converteren

>>> string_dict = u"{'code1':1, 'code2':1}"
>>> eval(string_dict)
{'code1': 1, 'code2': 1}

Other episodes