python:如何创建unicode对象的集合

时间:2013-08-08 13:41:48

标签: python

我在python / Django中有以下代码

movie_obj = Movies.objects.all() //assume there are 2 movies
for movie in movie_obj
    movie.genre                 //genre = models.CharField(max_length = 100, blank=True)

将打印出像

Drama, Sci-Fi, Thriller      //genre of movie_1

Biography, Drama, Music      // genre of movie_2

我想创建像

这样的电影类型
genre_set = Set([Drama, Sci-fi, thriller, Music, Biography])

问题: movie.genre是一个 unicode对象。由于movie_obj被视为单个unicode对象。

我怎么能从movie_obj获得个人类型,这样我就可以制作List和therby Set。

3 个答案:

答案 0 :(得分:1)

>>> a = unicode('bla, blee, bla, blue')
>>> a
u'bla, blee, bla, blue'
>>> a.split(', ')
[u'bla', u'blee', u'bla', u'blue']
>>> set(a.split(', '))
set([u'blee', u'blue', u'bla'])

对于每种类型,你可以将它们分开昏迷,然后有一个列表来做你想要的,然后你可以把它转换成一个集合,如果你愿意的话

答案 1 :(得分:1)

我不明白你的问题。但这应该有效:

genre_groups = Movies.objects.values_list('genre', flat = True) #output: ['Drama, Sci-Fi, Thriller', 'Biography, Drama, Music']
genres = [ agroup.split(",") for agroup in genre_groups ] #output: ['Drama', 'Sci-Fi', 'Thriller', 'Biography', 'Drama', 'Music']
genres_set = set(genres) #output = set('Drama', 'Sci-Fi', 'Thriller', 'Biography', 'Music')

编辑:我的不好,第二步返回一个数组数组。我会看到如何以优雅的方式解决它

替代步骤2和3:

genres_set = {}
for agroup in genre_groups:
    genres_set |= set(agroup.split(","))

答案 2 :(得分:1)

基本上unicode字符串可以是一个集合的成员,实际上你可以拥有混合unicode字符串和非unicode字符串的集合。

be_mixed = {u'unicode','non-unicode'}

>>> type(be_mixed)
<type set>
>>> be_mixed
set{['non-unicode',u'unicode']}

因此,您可以忽略字符串是否为unicode的问题。如果你试图

be_mixed = {u'unicode','non-unicode','unicode'}

你会发现be_mixed只有两个成员。

在2.7中,unicode的非unicode表示将持续存在。我想但不确定在3. +成员都将是unicode