python struct解压缩成dict

Foo*_*Bah 6 python unpack

struct.unpack会将数据解压缩到元组中.是否存在将数据存储到dict中的等价物?

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

Fog*_*ird 8

你想要这样的东西吗?

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

  • 我觉得这个解决方案很好,而且已经比使用 `collections.namedtuple` 来得更流畅 (2认同)

Pab*_*loG 8

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

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
Run Code Online (Sandbox Code Playgroud)


mtr*_*trw 5

struct文档显示直接解压缩到a 中的示例namedtuple.你可以结合这个namedtuple._asdict()来获得你的一个膨胀:

>>> import struct
>>> from collections import namedtuple
>>> record = 'raymond   \x32\x12\x08\x01\x08'
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._asdict(Student._make(struct.unpack('<10sHHb', record)))
{'school': 264, 'gradelevel': 8, 'name': 'raymond   ', 'serialnum': 4658}
>>> 
Run Code Online (Sandbox Code Playgroud)

如果重要,请注意在Python 2.7中_asdict()返回OrderedDict...

  • 有趣的答案.我看到它是一个动态生成的函数,但为什么_asdict()带有前置下划线? (3认同)