python - python 从 unicode 转换为 ascii

标签 python mongodb pymongo

好吧..这可能是重复的..但我认为我什至不知道正确的问题。 我猜我有一个unicode字符串..(基本上我正在从mongo db读取..并且mongodb以这种形式存储所有内容???老实说我不确定..但这就是我得到的..

{ u'preview': u'Hello World!!'}

所以在所有字段前面都有这个 u' .. 我基本上是想把这些提取出来!然后将它们附加到一根巨大的字符串中。 所以可以说我做了类似的事情:

 string =  ''
 resolve = foo['first_resolved_at']
 string += resolve

所以它抛出一个错误

TypeError: coercing to Unicode: need string or buffer, NoneType found

我做错了什么? 我想我必须将它转换为字符串..但是如何??? 谢谢

最佳答案

尽管答案已被接受,但我想我会提供一个示例以供引用,说明您应该如何使用 join() 而不是将字符串添加在一起。这也表明它避免使用 None 值:

d = {u'a': u'a', u'c': None, u'b': u'b', u'e': None, u'd': None, u'g': u'g', u'f': u'f', u'i': u'i', u'h': u'h', u'k': u'k', u'j': u'j', u'm': None, u'l': u'l', u'o': u'o', u'n': None, u'p': u'p'}

resolve = ''.join((value for value in d.itervalues() if value is not None))
print resolve
# u'abgfihkjlop'

如果您只想循环一组预定的键:

keys = ('c', 'g', 'f', 'm')
''.join([v for v in (d[k] for k in keys) if v is not None])

下面的测试显示了这种方法、附加到列表以及将字符串添加在一起之间的区别:

from time import time

d = {}
for i in xrange(1000):
    v = u'v%d' % i
    d[v] = v

def test1():
    return ''.join(v for v in d.itervalues() if v is not None)

def test2():
    result = []
    for v in d.itervalues():
        if v is not None:
            result.append(v)
    return ''.join(result)

def test3():
    result = ''
    for v in d.itervalues():
        if v is not None:
            result += v
    return result

def timeit(fn):
    start = time()
    r = fn()
    end = time() - start
    print "Sec:", end, "msec:", end*1000


>>> timeit(test1)
Sec: 0.000195980072021 msec: 0.195980072021
>>> timeit(test2)
Sec: 0.000204086303711 msec: 0.204086303711
>>> timeit(test3)
Sec: 0.000397920608521 msec: 0.397920608521

您可以看到,当循环变大时,效果确实会有所不同。

关于python - python 从 unicode 转换为 ascii,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9104538/

相关文章:

python - 仅将 sympy 矩阵的上三角值从 numpy.triu() 复制到数组中?

database - 我是否需要覆盖存储在数据库中的 Google Analytics 数据

node.js - 是否编写node.js api回调

mongoDB 不同,在同一个查询中在哪里?

mapreduce - pymongo 用户断言 : 13606 :'out' has to be a string or an object

python - 将带有值的字段添加到 mongo 返回的文档中

Python解析树状数据

python - 类型错误 : 'int' object is not callable

django - 如何将字段动态添加到继承自 mongoengine.django.auth.User 的 CustomUser 模型?

python - 在 SVN 工作副本中查找具有给定 SVN URL 的文件