Опустить последний элемент в списке через запятую - PullRequest
3 голосов
/ 28 ноября 2010

Я пишу систему тегов. Пользователь вводит ряд тегов:

abc, def, ghi,

Но если они используют запятую, код считает, что есть 4 тега, а не три.

В своем коде я пишу:

if "tags" in request.POST:
    tags = request.POST["tags"]
    tag_list = [Tag.objects.get_or_create(name = tag.lstrip())[0] for tag in tags.split(",")]

В этом случае создается тег ''. Как я могу изменить код, чтобы игнорировать любую запись, я полагаю, len (str) = 0?

Ответы [ 7 ]

3 голосов
/ 28 ноября 2010
>>> x = "first, second, third,"
>>> y = [ele for ele in x.split(',') if ele]
>>> y
['first', ' second', ' third']

Используя тот факт, что непустые строки возвращают True.

2 голосов
/ 28 ноября 2010
for tag in tags.split(",") if tag.strip()
1 голос
/ 29 ноября 2010

Вы действительно хотите использовать lstrip (), а не strip () для обработки тегов?Что делать, если пользователь вводит abc , def;Вы действительно хотите разрешить тег "abc " с завершающим пробелом?

Если вы действительно хотите удалить теги с обеих сторон (что, я думаю, вы делаете), тогда это просто сделатьзатем пропуская пустые:

try: # EAFP
    tags = (tag.strip() for tag in request.POST['tags'].split(','))
    tag_list = [Tag.objects.get_or_create(name = tag)[0] for tag in tags if tag]
    # 'if tag' is the operative "filtering" bit
except KeyError: pass
1 голос
/ 28 ноября 2010

Используйте фильтр (), вот так:

def f(x): return x != ''

filter( f, tag_list )
0 голосов
/ 28 ноября 2010

Если ваши теги фактически установлены индивидуально в одной и той же переменной, а не в виде списка строк, у вас есть возможность просто написать:

filter(len, map(str.strip, request.POST.getlist("keys")))

Без разбора списка строк вручную.

0 голосов
/ 28 ноября 2010

Вы можете выполнить всю вашу tags обработку в одном месте, поэтому вам не нужно звонить tag.lstrip() внутри get_or_create(name = ...):

if "tags" in request.POST:
    tags = request.POST["tags"]
    tags = (tag.lstrip() for tag in tags.split(',') if tag.strip())
    tag_list = [Tag.objects.get_or_create(name = tag)[0] for tag in tags]
0 голосов
/ 28 ноября 2010
tag_list = [tag.lstrip() for tag in tags.split(",") if len(tag.lstrip())>0]

сгенерирует tag_list без пустого символа.

Отдых должен быть простым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...