Python解析查询字符串以列表

标签 python flask

我有一个向服务器提交数据的表单,如下所示:

videos[0][type]=Vimeo&
  videos[0][moments][0][time]=11&
  videos[0][moments][0][lng]=111&
  videos[0][moments][0][lat]=111&
  videos[0][moments][1][time]=222&
  videos[0][moments][1][lng]=222&
  videos[0][moments][1][lat]=222&
videos[1][type]=YouTube&
  videos[1][moments][0][time]=111&
  videos[1][moments][0][lng]=111&
  videos[1][moments][0][lat]=111
...

我正在使用 Flask,我希望能够循环播放视频时刻,但似乎没有办法做到这一点。我尝试在 Google 上寻找图书馆,但今晚我的 Google 能力很弱。

有什么建议吗?谢谢!

编辑:根据lazy1的回答,我将他/她的代码修改为

def add(root, path, value):
  for part in path[:-1]:
    root = root.setdefault(part, {})
  root[path[-1]] = value

def parse(s):
  items = {}
  for key, value in parse_qsl(s):
    parts = filter(None, re.split('[\[\]]', key))
    name = parts[0]
    if name not in items: 
      items[name] = {}
    add(items[name], parts[1:], value)
  return items

这将生成一个哈希值:

{'map': {'title': 'orange'}, 'videos': {'1': {'moments': {'0': {'lat': '111', 'lng': '111', 'time': '111'}}, 'type': 'YouTube'}, '0': {'moments': {'1': {'lat': '222', 'lng': '222', 'time': '222'}, '0': {'lat': '111', 'lng': '111', 'time': '11'}}, 'type': 'Vimeo'}}}

对于如下所示的查询:

map[title]=orange&
videos[0][type]=Vimeo&
  videos[0][moments][0][time]=11&
  videos[0][moments][0][lng]=111&
  videos[0][moments][0][lat]=111&
  videos[0][moments][1][time]=222&
  videos[0][moments][1][lng]=222&
  videos[0][moments][1][lat]=222&
videos[1][type]=YouTube&
  videos[1][moments][0][time]=111&
  videos[1][moments][0][lng]=111&
  videos[1][moments][0][lat]=111
...

最佳答案

您可以使用urlparse.parse_qsl获取查询参数。但是,您需要手动构建视频对象。

示例实现可以是:

def add(root, path, value):
    for part in path[:-1]:
        root = root.setdefault(part, {})
    root[path[-1]] = value

def parse(s):
    videos = {}
    for key, value in parse_qsl(s):
        parts = filter(None, re.split('[\[\]]', key))
        insert(videos, parts[1:], value)
    return videos

关于Python解析查询字符串以列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6687698/

相关文章:

python - Python 中的韦尔奇方差分析

python - 从 Python 字典批量更新 PostgreSQL

python - 按列 NAME dtype 选择列

python - 验证 Flask WTF 表单中的选择字段

python - 在 Flask 路由中捕获任意路径

javascript - AngularJS:PUT 使用 URL 发送数据而不是 JSON 数据

python - Django - 创建电话评论应用程序模型的方向是否正确?

python - numpy.cross 和类似函数 : Do they allocate a new array on every call?

python - Flask SocketIO 从服务器发送消息到房间

javascript - 向 Flask 提交多个表单(400 BAD REQUEST)