2015-05-25 2 views
0

Python 2.7: словарь (переключатель заявление) значенийPython 2.7: словарь (переключатель заявление) значения

Я декодирование (струнный массив) шестигранные значений в поплавки, и я хотел бы использовать словарь для сохраняйте полученные значения float, хотя я не вижу, как это сделать. Для быстрого исправления я использовал инструкцию if-elif для этого - можно ли использовать словарь для этого? Это мой код до сих пор:

enter image description here

# assume data is in IEEE 754 format 
import struct 
from binascii import unhexlify 

inputData = ['41', 'b8', '00', '00', '40', '5d', '70', 'a4', '40', '07', 'ae', '14'] 
outputData = {'first': 0.0, 'second': 0.0, 'third': 0.0} 
for offset in [0, 4, 8]: 
    valueBytes = inputData[offset:offset+4] 
    value  = struct.unpack('>f',unhexlify(''.join(valueBytes)))[0] 
    print valueBytes, '=>', value 
    if offset == 0: 
     outputData['first'] = value 
    elif offset == 4: 
     outputData['second'] = value 
    elif offset == 8: 
     outputData['third'] = value 
    # could use if-else here but I'd like a dictionary 
    #options = { 
    # 0 : outputData['first'] = value, 
    # 4 : outputData['second'] = value,   
    # 8 : outputData['third'] = value 
    # }[offset] 

ответ

1

Pyhton не хава переключатель заявление. В большинстве случаев, когда используется переключатель на другом языке, вы бы использовать Dict поиск в питоне вместо:

inputData = ['41', 'b8', '00', '00', '40', '5d', '70', 'a4', '40', '07', 'ae', '14'] 
outputData = {'first': 0.0, 'second': 0.0, 'third': 0.0} 
offset_to_key = {0: 'first', 4: 'second', 8: 'third'} 
for offset in [0, 4, 8]: 
    valueBytes = inputData[offset:offset+4] 
    value  = struct.unpack('>f',unhexlify(''.join(valueBytes)))[0] 
    print valueBytes, '=>', value 
    outputData[offset_to_key[offset]] = value 

Другой возможностью было бы указать ключ, как переменной цикла:

inputData = ['41', 'b8', '00', '00', '40', '5d', '70', 'a4', '40', '07', 'ae', '14'] 
outputData = {'first': 0.0, 'second': 0.0, 'third': 0.0} 
for offset, dictkey in zip([0, 4, 8], ['first', 'second', 'third']): 
    valueBytes = inputData[offset:offset+4] 
    value  = struct.unpack('>f',unhexlify(''.join(valueBytes)))[0] 
    print valueBytes, '=>', value 
    outputData[dictkey] = value 
Смежные вопросы