从中提取字典<key><val>...<key><val> 有线数据



我正在扩展一个用 C 编写的低级模拟器,我必须在其中发送和接收一些套接字报文。我没有在 C 语言中弄乱这个,而是在嵌入式 python 脚本中制作这个扩展。这部分很简单,但由于我不是一个熟练的python程序员,我倾向于最终得到一些相当优雅的代码。例如,解析有线编码字典的一部分。

在网络上,字典如下所示:

<3><456>

有 3 个键值对:{MKey3: 456, MKey2: MVal2, MKey1: MVal1}

我最终得到了这个实现,它对于测试目的来说足够好,但我很好奇它可以简单多少?

    tiddata = '<3><Mkey3><456><Mkey2><Mval2><MKey1><MVal1>'
    q1 = re.compile('^<(?P<idatacnt>[^>]*)>(?P<idataload>.*)$')
    m1 = q1.search(tiddata)
    r1 = m1.groupdict()
    tidload = r1['idataload']
    tidcnt = int(r1['idatacnt'])
    tidata = {}
    q2 = re.compile ('<(?P<k>[^>]*)><(?P<v>[^>]*)>')
    for m in q2.finditer(tidload):
        t = m.groupdict()
        tidata[t['k']] = t['v']
    if len(tidata) != tidcnt:
        print('Invalid itemdata: <%s>' %tiddata)
        return

我会执行以下操作:

tiddata = '<Mkey3><456><Mkey2><Mval2><MKey1><MVal1>'
t = tiddata.strip('<>').split('><')
output = {t[i]: t[i+1] for i in range(0, len(t), 2)}

最新更新