struct.unpack会将数据解压缩到元组中。是否存在将数据存储到dict中的等价物?
在我的特定问题中,我正在处理固定宽度的二进制格式。我希望能够一下子解压缩并将值存储在dict中(目前我手动遍历列表并分配dict值)
答案 0 :(得分: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
答案 1 :(得分:5)
struct
文档显示an example直接解包到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
...
答案 2 :(得分:4)
你想要这样的东西吗?
keys = ['x', 'y', 'z']
values = struct.unpack('<III', data)
d = dict(zip(keys, values))