我在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。
答案 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