2015-10-27 142 views
1

我有一個Python腳本,它將讀取已有二進制文件中的兩個字節。一個字節確定設備類型,下一個確定子設備類型。兩者一起定義整個設備。使用兩個字典鍵(鍵1 _and_ 2)來確定值

例如:

x41 and x01 = Printer 
x43 and x01 = Audio Device 

我的代碼將需要找到既X41和X01爲了有一個打印機,例如。

我想過用字典來做這件事,但我認爲這意味着每個值有兩個鍵,並且看起來不像實現那麼微不足道(至少對於我的技能)。

字典是一種很好的方法嗎?或者會有其他更好的?

+0

您可以有一個由兩個值組成的密鑰。使用一個元組。例如'mydict [(a,b)] = c' – khelwood

+1

我認爲在這裏使用嵌套字典會更好。 –

回答

1

就像說在註釋中,兩個技術途徑是可能的:

Devices={(0x41,0x01) : 'Printer' , (0x43,0x01) : 'Audio Device', ...} 

ComputerDevices={ 0x41 : 'Printer' , 0x43 : 'Audio Device', ...} 
KitchenDevices={ 0x41 : 'Roaster' , 0x26 : 'Oven', ...} 
... 
Devices = {0x01: ComputerDevices , 0x02 :KitchenDevices, ...} 

您也可以連接你的字節:key =bytes([0x43,0x01])並將其用於字典鍵。

+0

你能否多說一點關於如何連接我讀取的字節?如果我抓住43,然後41,我會把它們連成一個鍵......怎麼樣? – tcv

+1

取決於你如何抓住他們。假設你從一個二進制文件中獲得它們:a = read(1),...,b = read(1),那麼code = bytes([a,b])是一個緊湊且唯一的密鑰。如果他們是連續的代碼=讀(2)是好的。字節是不可改變的,可用作字典鍵。所以你可以通過Devices [code] ='Printer'添加字典。 –

1

使用單級字典來表示這些數據有優點和缺點。然而,實現是微不足道的:使用一個元組作爲dicitonary關鍵字。

d = { (0x41,0x01) : "Printer", (0x43,0x01) : "Audio Device" } 
print "The device is:", d[major_byte,minor_byte] 

作爲替代方案,你可以使用嵌套的字典:

d = { 0x41 : { 0x01 : "Printer" }, 0x43 : { 0x01 : "Audio Device" } } 
print "The device is:", d[major_byte][minor_byte] 
你想使用哪一個

取決於您精確的要求。