python结构体解包到dict中



struct.unpack将把数据解包到元组中。有没有一个等价物可以将数据存储到dict中?

在我的特定问题中,我正在处理一个固定宽度的二进制格式。我希望能够一下子将值解压并存储在dict中(目前我手动浏览列表并分配dict值(

如果您使用的是2.6或更高版本,您可以使用namedtuple+struct.pack/unpull,如下所示:

import collections
import struct
Point = collections.namedtuple("Point", "x y z")
data = Point(x=1, y=2, z=3)
packed_data = struct.pack("hhh", *data)
data = Point(*struct.unpack("hhh", packed_data))
print data.x, data.y, data.z

你想要这样的东西吗?

keys = ['x', 'y', 'z']
values = struct.unpack('<III', data)
d = dict(zip(keys, values))

struct文档显示了一个直接拆包到namedtuple中的示例。你可以将其与namedtuple._asdict()结合起来,得到你的一个超级foop:

>>> import struct
>>> from collections import namedtuple
>>> record = 'raymond   x32x12x08x01x08'
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._asdict(Student._make(struct.unpack('<10sHHb', record)))
{'school': 264, 'gradelevel': 8, 'name': 'raymond   ', 'serialnum': 4658}
>>> 

如果重要的话,请注意,在Python 2.7中,_asdict()返回一个OrderedDict。。。

最新更新