2013-05-03 49 views
0

我有以下形式的字典:轉換字典以二進制的python

a = {(7, 190, 0): {0: 0, 1: 10, 2: 10, 3: 37, 4: 45, 5: 49, 6: 69, 7: 45, 8: 130, 9: 59}} 

,我試圖寫這個以二進制格式的文件。目前正在使用python 2.3

我試過在一個簡單的列表上使用struct模塊,它看起來像它可以工作,但是當我移動到字典時,它會拋出一個錯誤,說所需的參數不是整數。什麼是解決這個問題的好方法?我想某事像這樣:

packed_d=[] 
for ssd,(add_val) in a.iteritems(): 
    pack_d=struct.pack('BHB',ssd) 
    packed_data.append(pack_d) 

這是它扔了錯誤..

有什麼建議?

編輯: 酷,這就是我失蹤,詹恩。 我嘗試了以下,它看起來像它的工作,並能夠解壓以及檢查是否一切正常。你認爲這是一個好辦法嗎?謝謝!

data = {(7, 190, 0): {0: 0, 1: 101, 2: 7, 3: 0, 4: 0}} 
packed_data=[] 
for ssd,add_val in data.iteritems(): 
    pack_d=struct.pack('BHB', *ssd) 
    packed_data.append(pack_d) 
    for add,val in data[ssd].iteritems(): 
     pack_t=struct.pack('BH', add,val) 
     packed_data.append(pack_t) 

packed_data = [ '\ X07 \ X00 \ XBE \ X00 \ X00', '\ X00 \ X00 \ X00 \ X00', '\ X01 \ x00e \ X00',「\ X02 \ X00 \ X07 \ x00','\ x03 \ x00 \ x00 \ x00','\ x04 \ x00 \ x00 \ x00']

+5

爲什麼使用如此古老的python版本? – 2013-05-03 06:41:06

+0

是的,你的Python版本很快會有它的第十個生日。 ;-)另外,包括追蹤的副本通常是一個好主意。 – 2013-05-03 06:49:04

+0

「這是它拋出錯誤的地方..」哪一個? – glglgl 2013-05-03 07:26:35

回答

1

您正在給struct爲'BHB'格式,表示您應該有三個參數,一個無符號char,一個無符號的短符號,然後是另一個無符號的char。

但是你只傳入一個參數。這個參數不是一個整數,而是一個整數的元組。

這個工程(在Python 2.3測試3.3):

import struct 

a = {(7, 190, 0): {0: 0, 1: 10, 2: 10, 3: 37, 4: 45, 5: 49, 6: 69, 7: 45, 8: 130, 9: 59}} 

packed_data=[] 
for ssd in a: 
    packed_data.append(struct.pack('BHB', *ssd)) 

print(packed_data) 

或者也:

for a, b, c in a: 
    packed_data.append(struct.pack('BHB', a, b, c)) 

在Python的更高版本的你,而不是讓你沒有足夠的參數錯誤,這在這種情況下可能更有幫助。

+0

不錯...感謝Lennart – user2345778 2013-05-03 07:46:27

1

ssd是一個元組。通過在前面添加星號將其解包爲單個參數:

struct.pack('BHB', *ssd) 
+0

thks,這是掃管笏失蹤! – user2345778 2013-05-03 07:41:50

相關問題