好的,人。我自己实现了它:
import urllibdef recursive_urlenpre(d): """URL-enpre a multidimensional dictionary. >>> data = {'a': 'b&c', 'd': {'e': {'f&g': 'h*i'}}, 'j': 'k'} >>> recursive_urlenpre(data) u'a=b%26c&j=k&d[e][f%26g]=h%2Ai' """ def recursion(d, base=[]): pairs = [] for key, value in d.items(): new_base = base + [key] if hasattr(value, 'values'): pairs += recursion(value, new_base) else: new_pair = None if len(new_base) > 1: first = urllib.quote(new_base.pop(0)) rest = map(lambda x: urllib.quote(x), new_base) new_pair = "%s[%s]=%s" % (first, ']['.join(rest), urllib.quote(unipre(value))) else: new_pair = "%s=%s" % (urllib.quote(unipre(key)), urllib.quote(unipre(value))) pairs.append(new_pair) return pairs return '&'.join(recursion(d))if __name__ == "__main__": import doctest doctest.testmod()
尽管如此,我还是想知道是否有更好的方法可以做到这一点。我不敢相信Python的标准库无法实现这一点。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)