Python 如何将dict打包到结构中,以便将其存储在文件中,然后将其解包

Python 如何将dict打包到结构中,以便将其存储在文件中,然后将其解包,python,struct,Python,Struct,我有以下代码将字典打包到结构中 >>> this = bytearray(2) >>> this[0] = 100 >>> this[1] = 150 >>> bool = True >>> str = 'new' >>> dct = {'bt_arr': this, 'string':str, 'boolean': bool} >>>

我有以下代码将字典打包到结构中

>>> this = bytearray(2)    
>>> this[0] = 100   
>>> this[1] = 150  
>>> bool = True    
>>> str = 'new'  
>>> dct = {'bt_arr': this, 'string':str, 'boolean': bool}  
>>> print dct  
{'bt_arr': bytearray(b'd\x96'), 'boolean': True, 'string': 'new'}  
val = struct.pack ('!' + 'B' +'B' + 'B'*3 + '?', dct['bt_arr'][0], dct['bt_arr'][1],dct['string'][0:3], dct['boolean'])                                                                         
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
struct.error: pack requires exactly 6 arguments
>this=bytearray(2)
>>>这个[0]=100
>>>这[1]=150
>>>布尔=真
>>>str='新'
>>>dct={'bt_arr':this'string':str'boolean':bool}
>>>打印dct
{'bt_arr':bytearray(b'd\x96'),'boolean':True,'string':'new'}
val=struct.pack(“!”+“B”+“B”+“B”*3+“?”,dct['bt_-arr'][0],dct['bt_-arr'][1],dct['string'][0:3],dct['boolean']))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
struct.error:pack需要6个参数
你能告诉我在上面的代码中我做错了什么吗


我想以类似的方式将其解包…

此处缺少括号有一个问题:

dct['bt_arr'[1]
编辑:

val = struct.pack ('!' + 'B' +'B' + 'B'*3 + '?', dct['bt_arr'][0], dct['bt_arr'][1],dct['string'][0:3], dct['boolean'])
val = struct.pack('!' + 'B' +'B' + 'B'*3 + '?', *(list(dct['bt_arr']) + list(dct['string'][0:3]) + [dct['boolean']]))
此格式为<代码>'!'+'B'+'B'+'B'*3+'?'想要存储五个元素,这就是为什么函数需要六个参数(包括格式)。你只提供四个

EDIT2:

val = struct.pack ('!' + 'B' +'B' + 'B'*3 + '?', dct['bt_arr'][0], dct['bt_arr'][1],dct['string'][0:3], dct['boolean'])
val = struct.pack('!' + 'B' +'B' + 'B'*3 + '?', *(list(dct['bt_arr']) + list(dct['string'][0:3]) + [dct['boolean']]))

多亏了
martineau
eumiro
我得到了这个解决方案,请告诉我是否有更好的解决方案

val = struct.pack ('!' + 'B' +'B' + 'c'*3 + '?', *(tuple(dct['bt_arr'][0:2])+ tuple(dct['string'][0:3]) + (dct['boolean'],)))

有什么原因不能使用
pickle
marshall
shelve
等吗?@Dave Webb:感谢您的编辑…@SpliFF:我想使用struct.pack,因为我想将此值存储为一个文件的扩展属性,该文件将由我的C程序使用。我认为struct.pack会在这种情况下完成这项工作,因为dct['string'][0:3]我想提供3个参数,那么如何实现呢?将其更改为
list(dct['string'][0:3])
即使在这种情况下,我也会得到这个错误
val=struct.pack('!'+'B'+'B'+'B'+'B'+'B'*B'*3+'?',dct['bt arr'[0],dct['bt arr'][1],list(dct['string']
struct.error:pack正好需要6个参数
@eumiro:EDIT2提供了
struct.error:无法将参数转换为整数
。请使用
'!'+'@eumiro的EDIT2中的B'+'B'+'c'*3+'?'