Pertanyaan Bagaimana cara menghapus u '(unicode) dari kamus dengan Python?


Saya punya kamus

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

Bagaimana cara menghapus u 'dari kunci dan nilai (yang itu sendiri adalah kamus lain?))

Terima kasih!


6
2018-01-11 22:26


asal


Jawaban:


Satu kemungkinan mungkin (dengan asumsi 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)

Anda harus menghapus (via .pop) setiap kunci Unicode k, lalu masukkan kembali (dengan yang baru dikodekan val) setelah encoding k menjadi string byte, jika tidak (karena, untuk kunci yang hanya terdiri dari karakter ASCII, itu adalah kasus itu k == k.encode('utf-8')), kunci Unicode akan tetap ada. Coba itu dengan menggunakan d.get sebagai pengganti d.pop - Itu tidak melakukan apa yang kamu minta.

Apakah kamu benar-benar perlu apa yang Anda tanyakan sebenarnya cukup meragukan; jika semua string Unicode masuk d (dan dicts tertanam di dalamnya) hanya terdiri dari karakter ASCII, lalu d == encode_dict(d). Namun, bentuk "stringified" memang akan terlihat berbeda secara kosmetik, dan saya rasa itu mungkin yang Anda kejar.


5
2018-01-11 22:53



u menandakan unicode perwakilan.

Anda tidak perlu menghapusnya atau melakukan sesuatu, hanya pergi untuk kode Anda dan lakukan perbandingan

demo:

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

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

4
2018-01-11 22:32



Saya memiliki masalah yang sama seperti yang saya butuhkan setiap item dict untuk digunakan dalam ekspresi SQL dan u sedang menghalangi.

Inilah yang berhasil untuk saya:

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

Sangat sederhana :-)


2
2018-05-13 18:40



Karena Anda ingin membandingkan, karena orang lain menyarankan Anda tidak perlu mengubahnya tetapi jika Anda membutuhkannya. Inilah dia.

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

1
2018-05-13 19:08