python struct 解包成字典

发布于 2024-12-01 01:17:01 字数 123 浏览 1 评论 0原文

struct.unpack 将数据解包到一个元组中。是否有等效的方法可以将数据存储到字典中?

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

struct.unpack will unpack data into a tuple. Is there an equivalent that will store data into a dict instead?

In my particular problem, I am dealing with a fixed-width binary format. I want to be able, in one fell swoop, to unpack and store the values in a dict (currently I manually walk through the list and assign dict values)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

清眉祭 2024-12-08 01:17:01

如果您使用的是 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

If you're on 2.6 or newer you can use namedtuple + struct.pack/unpack like this:

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
初见你 2024-12-08 01:17:01

你想要这样的东西吗?

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

Do you want something like this?

keys = ['x', 'y', 'z']
values = struct.unpack('<III', data)
d = dict(zip(keys, values))
云仙小弟 2024-12-08 01:17:01

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< /代码>...

The struct documentation shows an example of unpacking directly into a namedtuple. You can combine this with namedtuple._asdict() to get your one swell foop:

>>> 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}
>>> 

If it matters, note that in Python 2.7 _asdict() returns an OrderedDict...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文