2015-01-11 17 views
6

Ich habe ein WörterbuchWie Sie u '(Unicode) aus einem Wörterbuch in Python entfernen?

{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}} 

Wie kann ich die u entfernen‘sowohl aus dem Schlüssel und dem Wert (der selbst eine andere Wörterbuch ist?))

Dank!

+2

'u' bezeichnet seine Unicode-Zeichenfolge. Du willst es entfernen ?? – Hackaholic

+1

Ich glaube nicht, dass du es kannst. Es zeigt an, dass die Zeichenfolge als Unicode dargestellt wird und somit kein Teil der Zeichenfolge ist. Btw in 'Python 3.x' gibt es Standard-Unicode-Unterstützung, so dass das' U' Präfix nicht verwendet wird. – VHarisop

+0

Ich vergleiche es mit anderen Daten, die nicht drin sind. – user3738426

Antwort

4

u bezeichnet die unicode Darstellung.

Sie nicht brauchen, um es zu entfernen oder etwas zu tun, nur für Ihren Code gehen und comparasion

Demo:

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

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

Eine Möglichkeit (unter der Annahme, Python 2) könnte:

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) 

Sie müssen jeden Unicode-Schlüssel k (über .pop) entfernen und ihn dann (nach dem Codieren) wieder einfügen (mit dem neu codierten Code val)in eine Byte-Zeichenfolge, andernfalls (da für Schlüssel, die nur aus ASCII-Zeichen bestehen, k == k.encode('utf-8') der Fall ist), würde der Unicode-Schlüssel erhalten bleiben. Versuchen Sie das mit d.get anstelle von d.pop - es tut nicht, was Sie fragen.

Ob Sie eigentlich brauchen was Sie fragen ist eigentlich ziemlich zweifelhaft; Wenn alle Unicode-Zeichenfolgen in d (und darin eingebetteten Zeichen) nur aus ASCII-Zeichen bestehen, dann d == encode_dict(d). Allerdings würden die "stringifizierten" Formen tatsächlich kosmetisch anders aussehen, und ich denke, das könnte das sein, wonach Sie suchen.

1

Ich hatte das gleiche Problem, wie ich jedes dict-Element in einem SQL-Ausdruck verwendet werden musste und die u war in die Quere kommen.

Dies ist, was für mich gearbeitet:

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

Sehr einfach :-)

0

Da Sie vergleichen wollen, wie andere vorgeschlagen, dass Sie es nicht brauchen, aber zu ändern, wenn Sie it.Here brauchen, ist es .

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'}} 
Verwandte Themen