2012-05-29 3 views
2

Учитывая список кортежей для имен параметров и значений, например:Как обрабатывать параметры запроса в виде списка кортежей?

[("foo", 10), ("bar", None), ("baz", "some_string")] 

и некоторые URL строки, например:

"/some/url/string" 

моя функция должна быть в состоянии создать следующую строку вывода (Обратите внимание, что ни одно значение кортежи не включены в строку запроса):

"/some/url/string?foo=10&baz=some_string" 

Я попытался использовать объединение, но поскольку значения не все строки, мне пришлось бы конвертировать их сначала. Может быть, кто-то может помочь мне с коротким и чистым способом сделать это.

ответ

4
>>> from urllib import urlencode 
>>> data = [("foo", 10), ("bar", None), ("baz", "some_string")] 
>>> urlencode(data) 
'foo=10&bar=None&baz=some_string' 
>>> urlencode([x for x in data if x[1] is not None]) # no None's 
'foo=10&baz=some_string' 
+2

+1 wow .. батареи включены действительно! – Levon

2

Просто используйте встроенный urllib для кодирования параметров для вас.

>>> import urllib 
>>> parameters = [("foo", 10), ("bar", None), ("baz", "some_string")] 
>>> clean_parameters = [parameter for parameter in parameters if parameter[1] is not None] 
>>> urllib.urlencode(clean_parameters) 
'foo=10&baz=some_string' 
+5

'if параметр [1]' блокирует значения '0'. Используйте 'if параметр [1] не является None' – eumiro

+0

Правда, это меня укусит, когда я печатаю быстрее, чем я думаю. :) –

+0

@ChristianWitts Было бы неплохо обновить/исправить ваш ответ, не все будут читать все комментарии. – Levon