如何从Python中的字典中删除u'(unicode)?

时间:2015-01-11 22:26:02

标签: python dictionary unicode

我有一本字典

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

如何从键和值中删除u'(它本身就是另一个字典?)

谢谢!

4 个答案:

答案 0 :(得分:5)

一种可能性(假设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)

您需要删除(通过.pop)每个Unicode密钥k,然后在将val编码为字节后将其插回(使用新编码的k)字符串,否则(因为,对于仅由ASCII字符组成的密钥,情况是k == k.encode('utf-8')),Unicode密钥将保留。尝试使用d.get代替d.pop - 它没有做你要求的事。

你是否真的需要你所要求的实际上是非常可疑的;如果d中的所有Unicode字符串(以及其中的嵌入式字符串)仅由ASCII字符组成,则为d == encode_dict(d)。然而,"字符串化"表格确实看起来不同,我想这可能是你所追求的。

答案 1 :(得分:4)

u表示unicode表示。

你不需要删除它或做某事,只需要你的代码并进行比较

演示:

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

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

答案 2 :(得分:2)

我遇到了同样的问题,因为我需要在SQL表达式中使用每个dict项目,并且u&#39;阻碍了。

这对我有用:

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

很简单: - )

答案 3 :(得分:1)

由于你想比较,正如其他人建议你不需要改变它,但如果你需要它。就是这样。

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