【问题标题】:How to remove u' (unicode) from a dictionary in Python?如何从 Python 中的字典中删除 u'(unicode)?
【发布时间】:2015-01-11 22:26:01
【问题描述】:

我有一本字典

{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'(它本身是另一个字典?))

谢谢!

【问题讨论】:

  • u 表示它的 unicode 字符串。你想删除它吗??
  • 我不认为你可以。它表示字符串表示为 unicode,因此它不是字符串的一部分。顺便说一句,python 3.x 中默认支持 unicode,因此不使用 u 前缀。
  • 我将它与另一个没有 u' 的数据进行比较。

标签: python dictionary unicode


【解决方案1】:

我遇到了同样的问题,因为我需要在 SQL 表达式中使用每个 dict 项,而 u' 妨碍了。

这对我有用:

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

非常简单:-)

【讨论】:

    【解决方案2】:

    既然你想比较,正如其他人所说,你不需要改变它,但如果你需要它。这里是它。

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

    【讨论】:

      【解决方案3】:

      一种可能性可能是(假设 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,然后在将k 编码为字节字符串后将其插入回来(使用新编码的val),否则(因为对于键仅由 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-20
          • 2016-10-30
          • 2019-05-30
          • 1970-01-01
          • 2012-10-10
          • 1970-01-01
          相关资源
          最近更新 更多