在 Django/Python 中创建列表时未获得预期结果

Not getting desired results when creating a list in Django/Python

我已经处理这个问题几个小时了,但似乎无法解决它,我希望我的 Django 保存功能能够像我的清理功能一样工作,但我总是得到不想要的结果。

example.txt 放入表格 -----> #lets #try 是我的问题。

clean 函数最终打印出 ['#lets','try'], ['#lets','try'],出于某种原因打印了两个,我不确定为什么,但这就是我想要,我也希望能够从列表中取出重复的值。

    def clean(self):
       data = self.cleaned_data
       regex = re.compile("\B#\w\w+")
       tweeters = data['tweets']
       split_tweets = tweeters.split()
       master_list = []
       for x in split_tweets:
         if re.search(regex, x):
            master_list.append(x)
            new_list = list(set(master_list))
         print new_list

save 函数打印出这个,当我希望它得到与我的 clean 函数相同的结果时,导致当我尝试在我的 save 函数中使用 new_list 创建主题标签对象时它创建了 3(让, lets, try) 对象而不是 2(lets, try) 对象,这就是为什么我只使用 x 而不是 new_list。有什么需要清理的就告诉我

[u'#lets']
[u'#lets', u'#try']

保存功能

def save(self, *args, **kwargs):
    data=self.cleaned_data
    regex = re.compile("\B#\w\w+")
    cleaned_tweets = data['tweets']
    split_tweets = cleaned_tweets.split()
    obj = Tweet(tweets=data['tweets'], userprofile=self.userprofile, date=timezone.now(),)
    obj.save()
    hashtag_list = []
    for x in (split_tweets):
        if re.search(regex, x):
            print x
            hashtag_list.append(x)
            new_list = list(set(hashtag_list))
            print new_list
            obj_rel = Hashtags(users_tweet=obj, hashtag=x.replace("#", ""))
            obj_rel.save()
        else:
            return ValidationError('Something went wrong try again in a few seconds')

您正在循环外创建 hashtag_list 并将主题标签附加到它。在循环的第一次迭代中,附加第一个主题标签并创建对象。在第二次迭代中,hashtag_list 包含两个主题标签,因此如果您使用 new_list 创建对象,您将获得两个(第一个和第二个的副本)。要么每次迭代创建一个对象,完全删除 hashtag_list,要么仅在循环后通过迭代 hashtag_list 创建对象。您可以在 split_tweets 上使用 set 来删除重复项,或者更好的是,在 clean 方法中执行此操作,这样您就不必在 save 中处理它。

例如:

for x in (split_tweets):
    if re.search(regex, x):
        hashtag_list.append(x)
new_list = set(hashtag_list)
for hashtag in new_list:        
    obj_rel = Hashtags(users_tweet=obj, hashtag=hashtag.replace("#", ""))
    obj_rel.save()