2015-01-11 13 views
6

Ho un dizionarioCome rimuovere u '(unicode) da un dizionario in Python?

{u'value1': {u'Capacity1': 0, u'E1': 'None', u'status': u'ONLINE', u'name': u'value1', u'perf': 'None', u'Id': u'2005', u'id1': u'3000', u'Capacity2': 4}} 

Come posso rimuovere la u' sia la chiave e il valore (che di per sé è un altro dizionario?))

Grazie!

+2

'u' denota la sua stringa unicode. vuoi rimuoverlo ?? – Hackaholic

+1

Non penso che tu possa. Indica che la stringa è rappresentata come unicode, quindi non fa parte della stringa. Btw in 'python 3.x' c'è il supporto Unicode di default, quindi il prefisso' u' non è usato. – VHarisop

+0

Lo metto a confronto con un altro dato che non ha u 'in esso. – user3738426

risposta

4

u indica la rappresentazione unicode.

non avete bisogno di rimuoverlo o fare qualcosa, basta andare per il codice e fare comparasion

demo:

>>> type(u'b') 
<type 'unicode'> 

>>> u'b' == 'b' 
True 
5

Una possibilità potrebbe essere (supponendo Python 2):

def encode_dict(d, codec='utf8'): 
    ks = d.keys() 
    for k in ks: 
     val = d.pop(k) 
     if isinstance(val, unicode): 
      val = val.encode(codec) 
     elif isinstance(val, dict): 
      val = encode_dict(val, codec) 
     if isinstance(k, unicode): 
      k = k.encode(codec) 
     d[k] = val 
    return d 

top_d = encode_dict(top_d) 

È necessario rimuovere (tramite .pop) ciascuna chiave Unicode , quindi reinserirla (con la codifica appena codificata val) dopo la codifica k in una stringa di byte, altrimenti (poiché, per le chiavi costituite solo da caratteri ASCII, è il caso di k == k.encode('utf-8')), la chiave Unicode rimarrebbe. Provalo usando d.get invece di d.pop - non fa quello che chiedi.

Se in realtà lo ha bisogno di quello che chiedi è in realtà piuttosto discutibile; se tutte le stringhe Unicode in d (e diciture incorporate) sono costituite solo da caratteri ASCII, quindi d == encode_dict(d). Tuttavia, i moduli "stringificati" apparirebbero in effetti esteticamente diversi, e immagino che potrebbe essere quello che cerchi.

1

Ho avuto lo stesso problema di cui avevo bisogno ogni elemento dict da utilizzare in un'espressione SQL e il sistema stava interferendo.

Questo è ciò che ha funzionato per me:

for x,y in mylist.items(): 
     mylist[x] = str(y) 

Molto semplice :-)

0

Dal momento che si desidera confrontare, come altri hanno suggerito non c'è bisogno di cambiare, ma se avete bisogno è it.Here .

In [90]: d 
Out[90]: 
{u'value1': {u'Capacity1': 0, 
    u'Capacity2': 4, 
    u'E1': 'None', 
    u'Id': u'2005', 
    u'id1': u'3000', 
    u'name': u'value1', 
    u'perf': 'None', 
    u'status': u'ONLINE'}} 

In [91]: c_k,c_v=d.keys(),d.values() 

In [92]: z=[{str(k):str(v) for (k,v) in c_v[0].items()}] 

In [93]: z1=[str(i) for i in c_k] 

In [94]: dict(zip(z1,z)) 
Out[94]: 
{'value1': {'Capacity1': '0', 
    'Capacity2': '4', 
    'E1': 'None', 
    'Id': '2005', 
    'id1': '3000', 
    'name': 'value1', 
    'perf': 'None', 
    'status': 'ONLINE'}}