清理 url 查询的解析

Clean parsing of url query

目前,每当我需要解析查询字符串时,我最初都是在做

 from urllib import parse

 path = parse.urlparse(self.path)
 query = parse.parse_qs(path.query)

 value = query[name][0]

但我不喜欢 [0] 点缀在我的代码周围 - 它感觉 错误 以某种难以确定的方式,所以我意识到我可以做

 from urllib import parse

 path = parse.urlparse(self.path)
 query = dict(parse.parse_qsl(path.query))

 value = query[name]

这具有删除 [0] 的优点,但它有丢弃多个值的风险(这对我的应用程序来说应该没问题,无论如何它都不应该接收多个值)。

是否有一种更简洁的解析 urlencoded 字符串的方法,它为您提供 dict 最小值:如果只有一个值,则为值;如果有多个,则为列表?

这样做的功能应该不会太难,但我很好奇是否有一个库可以做到这一点,所以我不需要重新发明轮子。

一般来说,如果你有这样的字典query,你总是可以

query = {[(k, v[0] if len(v) == 1 else v) for k, v in query.iteritems()]}

但是,我真的不喜欢这段代码,因为它只会产生一些后来不直观的东西。