jQueryからPOSTした値を連想配列にする@python

ブラウザからサーバーに連想配列のような値を渡したいときがあります。
phpではinputタグの中の値を


name="abc[a][b][c] value="some_value"
とすれば、フォームを送信すると、自動的に連想配列としてアクセスできます。
が、pythonではキーが"abc[a][b][c]"というような文字列になってしまい、
連想配列として扱えませんでした。
abc.a.b.cになっていれば分解してくれるモジュールがあったと思いますが、
jQueryのPOSTは角括弧の方になっているので、
リクエストのキーを連想配列に分解する関数を自分で書きました。
ただし、全く同じキーがあるときは後で読まれた値しか入らないようになっているので、
使うときはその辺りにご注意ください。

#sample data
params = {
  "abc[a][b][c]": "@m1m0r1",
  "abc[a][b][d]": "@shinout",
  "abc[a][c]": "@gemmbu",
}

requestToDict(params)

のようにして使います。

以下コードです。

def requestToDict(params):
  def buildDict(d, keylist, value):
    if not keylist:
      return value
    key = keylist[0]
    if key not in d:
      d[key] = buildDict(dict(), keylist[1:], value)
    else:
      buildDict(d[key], keylist[1:], value)
    return d

  def setval(d, key, value):
    keylist = key.replace("]", "").split("[") #keylistを作る
    buildDict(d, keylist, value)

  dic = {}
  for key, val in params.iteritems():
    setval(dic, key, val)

  return dic