0

我在 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 object。由于 movie_obj 被视为单个 unicode 对象。

我如何从movie_obj 中获取个别类型,以便我可以制作List 和therby Set。

4

3 回答 3

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'])

对于每种类型,您可以在昏迷时将它们拆分,然后有一个列表来做您想做的事情,然后您可以将其转换为一组,如果您愿意的话

于 2013-08-08T13:46:43.303 回答
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(","))
于 2013-08-08T13:50:08.443 回答
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

于 2013-08-08T13:55:54.947 回答