python - 将三级定界的字符串解析成字典

标签 python parsing dictionary delimited

我找到了如何在字典中将定界字符串拆分为键值对 elsewhere ,但我有一个传入的字符串,其中还包含两个相当于字典本身的参数:其中包含一个或三个键:值对的参数:

clientid=b59694bf-c7c1-4a3a-8cd5-6dad69f4abb0&keyid=987654321&userdata=ip:192.168.10.10,deviceid:1234,optdata:75BCD15&md=AMT-Cam:avatar&playbackmode=st&ver=6&sessionid=&mk=PC&junketid=1342177342&version=6.7.8.9012

显然,这些是用来混淆专有代码的虚拟参数。我想将所有这些转储到字典中,userdatamd 键的值本身就是字典:

requestdict {'clientid' : 'b59694bf-c7c1-4a3a-8cd5-6dad69f4abb0', 'keyid' : '987654321', 'userdata' : {'ip' : '192.168.10.10', 'deviceid' : '1234', 'optdata' : '75BCD15'}, 'md' : {'Cam' : 'avatar'}, 'playbackmode' : 'st', 'ver' : '6', 'sessionid' : '', 'mk' : 'PC', 'junketid' : '1342177342', 'version' : '6.7.8.9012'}

我可以使用我找到的巧妙的两级定界解析命令吗:

requestDict = dict(line.split('=') for line in clientRequest.split('&'))

并向其添加第三层来处理和保存第二层词典?语法是什么?如果没有,我想我将不得不按 & 进行拆分,然后检查并处理包含 : 的拆分,但即使那样我也无法弄清楚语法。有人可以帮忙吗?谢谢!

最佳答案

我基本上拿了Kyle's answer并使其对 future 更加友好:

def dictelem(input):   
    parts   = input.split('&')
    listing = [part.split('=') for part in parts]

    result = {}
    for entry in listing:
        head, tail = entry[0], ''.join(entry[1:])
        if ':' in tail:
            entries = tail.split(',')
            result.update({ head : dict(e.split(':') for e in entries) })
        else:
            result.update({head: tail})

    return result

关于python - 将三级定界的字符串解析成字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13753279/

相关文章:

json - 如何在 Go 中解码 json

python - 将变量从 MQTT 传递给 Kivy

python - 在列表python中查找列表

parsing - LL(k) 有哪些广泛使用的语言?

java - 如何在流式 json 中使用 jackson 的上下文?

java - 如何在java中克隆或创建Map的新副本

python - 在 Plotly 气泡图中标记特定气泡

python - Matplotlib 在所有子图上显示 x-ticks 和唯一的 y 标签

C#-尝试将用户输入解析为 int 时出错

python使用字符串列表创建字典,字符串长度作为值