7

struct.unpack は、データをタプルにアンパックします。代わりに辞書にデータを格納する同等のものはありますか?

私の特定の問題では、固定幅のバイナリ形式を扱っています。一挙に、値を解凍してdictに保存できるようにしたい(現在、手動でリストを調べて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()、1 つのうねりフープを得ることができます。

>>> 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 に答える