python struct распаковать в dict - PullRequest
       3

python struct распаковать в dict

5 голосов
/ 23 августа 2011

struct.unpack распакует данные в кортеж. Есть ли эквивалент, который вместо этого будет хранить данные в dict?

В моей конкретной проблеме я имею дело с двоичным форматом фиксированной ширины. Я хочу иметь возможность одним махом распаковать и сохранить значения в формате dict (в настоящее время я вручную иду по списку и назначаю значения dict)

Ответы [ 3 ]

8 голосов
/ 23 августа 2011

Если вы используете 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
5 голосов
/ 23 августа 2011

Документация 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 ...

4 голосов
/ 23 августа 2011

Хочешь что-нибудь подобное?

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