7

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

在我的特定问题中,我正在处理固定宽度的二进制格式。我希望能够一举将值解包并存储在字典中(目前我手动遍历列表并分配字典值)

4

3 回答 3

9

如果您使用的是 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
于 2011-08-23T02:15:20.927 回答
8

你想要这样的东西吗?

keys = ['x', 'y', 'z']
values = struct.unpack('<III', data)
d = dict(zip(keys, values))
于 2011-08-23T02:09:34.753 回答
6

struct文档显示了一个直接解包到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}
>>> 

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

于 2011-08-23T02:23:05.447 回答