如何在Python中从字典中移除u'(Unicode)?

6

我有一个字典

{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'?

谢谢!


2
为什么要移除 u 表示它是 Unicode 字符串? - Hackaholic
1
我不认为你可以这样做。这表明字符串被表示为Unicode,因此它不是字符串的一部分。顺便说一下,在 Python 3.x 中有默认的Unicode支持,所以不需要使用 u 前缀。 - VHarisop
我正在将其与另一个没有u'的数据进行比较。 - user3738426
4个回答

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)。但是,“字符串化”的形式确实看起来不同,我想这可能就是你想要的。


4

u代表unicode表示。

你不需要删除它或做任何操作,只需进行代码比较即可。

演示:

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

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

2

我曾经遇到过同样的问题,因为我需要在 SQL 表达式中使用每个 dict 条目,而 u' 阻碍了我的操作。

以下方法适用于我:

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

非常简单 :-)

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接