Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Coding and Decoding in Python

Reply
Thread Tools

Coding and Decoding in Python

 
 
Wanderer
Guest
Posts: n/a
 
      03-17-2011
I have a dll that to communicate with I need to send numeric codes. So
I created a dictionary. It works in one direction in that I can
address the key and get the value. But when the program returns the
value I can't get the key. This code is very simple and I could use a
list and the index except for the last value. Is there a better way to
handle coding and decoding values to strings?

QCam_Info = {
'qinfCameraType' : 0, # Camera model (see
QCam_qcCameraType)
'qinfSerialNumber' : 1, # Deprecated
'qinfHardwareVersion' : 2, # Hardware version
'qinfFirmwareVersion' : 3, # Firmware version
'qinfCcd' : 4, # CCD model (see
QCam_qcCcd)
'qinfBitDepth' : 5, # Maximum bit depth
'qinfCooled' : 6, # Returns 1 if
cooler is available, 0 if not
'qinfReserved1' : 7, # Reserved
'qinfImageWidth ' : 8, # Width of the ROI (in
pixels)
'qinfImageHeight' : 9, # Height of the ROI (in
pixels)
'qinfImageSize' : 10, # Size of returned
image (in bytes)
'qinfCcdType' : 11, # CDD type (see
QCam_qcCcdType)
'qinfCcdWidth' : 12, # CCD maximum width
'qinfCcdHeight' : 13, # CCD maximum height
'qinfFirmwareBuild' : 14, # Build number of the
firmware
'qinfUniqueId' : 15, # Same as uniqueId
in QCam_CamListItem
'qinfIsModelB' : 16, # Cameras
manufactured after March 1, 2004 return 1, otherwise 0
'qinfIntensifierModel' : 17, # Intensifier tube
model (see QCam_qcIntensifierModel)
'qinfExposureRes' : 18, # Exposure time
resolution (nanoseconds)
'qinfTriggerDelayRes' : 19, # Trigger delay
Resolution (nanoseconds)
'qinfStreamVersion' : 20, # Streaming version
'qinfNormGainSigFigs' : 21, # Normalized Gain
Significant Figures resolution
'qinfNormGaindBRes' : 22, # Normalized Gain dB
resolution (in micro units)
'qinfNormITGainSigFigs' : 23, # Normalized Intensifier
Gain Significant Figures
'qinfNormITGaindBRes' : 24, # Normalized Intensifier
Gain dB resolution (micro units)
'qinfRegulatedCooling' : 25, # 1 if camera has
regulated cooling
'qinfRegulatedCoolingLock' : 26, # 1 if camera is at
regulated temperature, 0 otherwise
'qinfFanControl' : 29, # 1 if camera can
control fan speed
'qinfHighSensitivityMode' : 30, # 1 if camera has high
sensitivity mode available
'qinfBlackoutMode' : 31, # 1 if camera has
blackout mode available
'qinfPostProcessImageSize' : 32, # Returns the size (in
bytes) of the post-processed image
'qinfAsymmetricalBinning' : 33, # 1 if camera has
asymmetrical binning (ex: 2x4)
'qinfEMGain' : 34, # 1 if EM gain is
supported, 0 if not
'qinfOpenDelay' : 35, # 1 if shutter open
delay controls are available, 0 if not
'qinfCloseDelay' : 36, # 1 if shutter close
delay controls are available, 0 if not
'qinfColorWheelSupported' : 37, # 1 if color wheel is
supported, 0 if not
'qinfReserved2' : 38,
'qinfReserved3' : 39,
'qinfReserved4' : 40,
'qinfReserved5' : 41,
'qinfEasyEmModeSupported' : 42, # 1 if camera supports
Easy EM mode
'qinfLockedGainModeSupported' : 43,
'qinf_last' : 44,
'_qinf_force32' : 0xFFFFFFFF
}
 
Reply With Quote
 
 
 
 
Mel
Guest
Posts: n/a
 
      03-17-2011
Wanderer wrote:

> I have a dll that to communicate with I need to send numeric codes. So
> I created a dictionary. It works in one direction in that I can
> address the key and get the value. But when the program returns the
> value I can't get the key. This code is very simple and I could use a
> list and the index except for the last value. Is there a better way to
> handle coding and decoding values to strings?
>
> QCam_Info = {
> 'qinfCameraType' : 0, # Camera model (see
> QCam_qcCameraType)
> 'qinfSerialNumber' : 1, # Deprecated
> 'qinfHardwareVersion' : 2, # Hardware version
> 'qinfFirmwareVersion' : 3, # Firmware version
> 'qinfCcd' : 4, # CCD model (see
> QCam_qcCcd)

[ ... ]
'_qinf_force32' : 0xFFFFFFFF
> }


I handled this problem in a kind of cheap, nasty way with (untested)

for k, v in QCam_Info.items():
QCam_Info[v] = k

Then the dictionary lookups work both ways.

Mel.
 
Reply With Quote
 
 
 
 
John Gordon
Guest
Posts: n/a
 
      03-17-2011
In <(E-Mail Removed)> Wanderer <(E-Mail Removed)> writes:

> But when the program returns the value I can't get the key.


What happens when two keys have the same value? How would you know which
key to return?

In your sample code all the values are different, but surely that won't
always be the case with real data.

--
John Gordon A is for Amy, who fell down the stairs
http://www.velocityreviews.com/forums/(E-Mail Removed) B is for Basil, assaulted by bears
-- Edward Gorey, "The Gashlycrumb Tinies"

 
Reply With Quote
 
Wanderer
Guest
Posts: n/a
 
      03-17-2011
On Mar 17, 11:44*am, John Gordon <(E-Mail Removed)> wrote:
> In <(E-Mail Removed)> Wanderer <(E-Mail Removed)> writes:
>
> > But when the program returns the value I can't get the key.

>
> What happens when two keys have the same value? *How would you know which
> key to return?
>
> In your sample code all the values are different, but surely that won't
> always be the case with real data.
>
> --
> John Gordon * * * * * * * * * A is for Amy, who fell down the stairs
> (E-Mail Removed) * * * * * * *B is for Basil, assaulted by bears
> * * * * * * * * * * * * * * * * -- EdwardGorey, "The Gashlycrumb Tinies"


I guess two keys having the same value is why dictionaries don't
return keys for values, but this is a code. Each value has a unique
meaning to both sender and receiver. The text part is for making the
program understandable and printing understandable error messages.

 
Reply With Quote
 
John Gordon
Guest
Posts: n/a
 
      03-17-2011
In <(E-Mail Removed)> Wanderer <(E-Mail Removed)> writes:

> I guess two keys having the same value is why dictionaries don't
> return keys for values, but this is a code. Each value has a unique
> meaning to both sender and receiver. The text part is for making the
> program understandable and printing understandable error messages.


I see. You're storing integer equivalents for the labels themselves,
not the actual data associated with the labels.

Then Mel's solution is a good one -- construct a second dict which
has the keys and values swapped.

--
John Gordon A is for Amy, who fell down the stairs
(E-Mail Removed) B is for Basil, assaulted by bears
-- Edward Gorey, "The Gashlycrumb Tinies"

 
Reply With Quote
 
Steven D'Aprano
Guest
Posts: n/a
 
      03-18-2011
On Thu, 17 Mar 2011 08:07:28 -0700, Wanderer wrote:

> I have a dll that to communicate with I need to send numeric codes. So I
> created a dictionary. It works in one direction in that I can address
> the key and get the value. But when the program returns the value I
> can't get the key.


If you only have a few keys:

def find_key(value, d):
"""Return the key in dictionary d that has the given value.
If there are multiple keys with the same value, return an
arbitrarily chosen one."""
for k, v in d.items():
if v == value: return k
raise KeyError('no such value found')


If you have many keys/values, then simply create a reverse dictionary:

Rev_QCam_Info = {}
for key, value in QCam_Info.items():
Rev_QCam_Info[value] = key

and then search that.




--
Steven

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Python 3.0 automatic decoding of UTF16 Johannes Bauer Python 25 12-07-2008 10:20 PM
Python barcode decoding Robocop Python 5 10-28-2008 11:08 AM
general coding issues - coding style... calmar Python 11 02-21-2006 10:36 AM
X-faces decoding with Python Nemesis Python 0 08-24-2003 09:17 AM
Re: decoding video-/teletext with python Tim Roberts Python 0 06-25-2003 06:28 AM



Advertisments