Python 2如何将values_list操作返回的unicode列表更改为字符串列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 2如何将values_list操作返回的unicode列表更改为字符串列表相关的知识,希望对你有一定的参考价值。

我执行此操作以检索查询集:

Name.objects.values_list('name', flat=True)

它返回以下结果:

[u'accelerate', u'acute', u'bear', u'big']

结果都是unicode(u')。如何将它们全部删除以便得到结果:

['accelerate', 'acute', 'bear', 'big']
答案

如果你想用utf8编码,你可以简单地做:

definitions_list = [definition.encode("utf8") for definition in definitions.objects.values_list('title', flat=True)]
另一答案

您可以在所有值上调用str(请注意,地图有点懒,添加list()会立即将其转换回可索引对象):

thingy = list(map(str, [u'accelerate', u'acute', u'bear', u'big']))

或者使用列表理解:

[str(item) for item in [u'accelerate', u'acute', u'bear', u'big']]

最后,为什么你要求他们明确地成为str;添加到django模板(如{{ value }}),你的将会消失。

另一答案

我认为简短的方法是使用json.dumps()

json.dumps(definitions.objects.values_list('title', flat=True))

所以你会得到json格式的字符串结果

'["accelerate", "acute", "bear", "big" ...]'

如果你想把它改成python变量,只需使用eval作为函数,所以你的代码更像这样

json_format_string = json.dumps(definitions.objects.values_list('title', flat=True))

my_list = eval(json_format_string)  # ['accelerate', 'acute', 'bear', 'big' ...]
另一答案

在python 2.7中使用没有列表的地图也很好

list_of_python_strings = map(str, [u'accelerate'])
另一答案

我用过这个

my_list = list(map(str, [u'accelerate', u'acute', u'bear', u'big'...]))

以上是关于Python 2如何将values_list操作返回的unicode列表更改为字符串列表的主要内容,如果未能解决你的问题,请参考以下文章

python django model values_list to dictionary

当不再需要时,JVM 是不是会将空闲内存返还给操作系统?

django中filter的values_list条件使用

django values 与values_list

ORM一般操作

从 values() 或 values_list() 中排除字段