在 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()
我已经处理这个问题几个小时了,但似乎无法解决它,我希望我的 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()