Why isn't this code working how I want it to?

2013-10-12 Thread reubennottage
I've been working on a program and have had to halt it due a slight problem. 
Here's a basic version of the code:

a = 'filled'
b = 'filled'
c = 'empty'
d = 'empty'
e = 'filled'
f = 'empty'
g = 'filled'

testdict = {a : 'apple' , b : 'banana' , c : 'cake' , d : 'damson' , e : 'eggs' 
, f : 'fish' , g : 'glue'}


Now what I want to do, is if a variable is filled, print it out. This however 
isn't working how I planned. The following doesn't work.

for fillempt in testdict:
if fillempt == 'filled':
print(testdict[fillempt])

All this does though, is print glue, where I'd want it to print:

apple
banana
eggs
glue

Perhaps a dictionary isn't the best way to do this.. I wonder what else I can 
do...

Thanks for any help.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Why isn't this code working how I want it to?

2013-10-12 Thread Marco Nawijn
On Saturday, October 12, 2013 10:56:27 AM UTC+2, reuben...@gmail.com wrote:
 I've been working on a program and have had to halt it due a slight problem. 
 Here's a basic version of the code:
 
 
 
 a = 'filled'
 
 b = 'filled'
 
 c = 'empty'
 
 d = 'empty'
 
 e = 'filled'
 
 f = 'empty'
 
 g = 'filled'
 
 
 
 testdict = {a : 'apple' , b : 'banana' , c : 'cake' , d : 'damson' , e : 
 'eggs' , f : 'fish' , g : 'glue'}
 
 
 
 
 
 Now what I want to do, is if a variable is filled, print it out. This however 
 isn't working how I planned. The following doesn't work.
 
 
 
 for fillempt in testdict:
 
 if fillempt == 'filled':
 
 print(testdict[fillempt])
 
 
 
 All this does though, is print glue, where I'd want it to print:
 
 
 
 apple
 
 banana
 
 eggs
 
 glue
 
 
 
 Perhaps a dictionary isn't the best way to do this.. I wonder what else I can 
 do...
 
 
 
 Thanks for any help.

Hi,

Remember that keys in a dictionary are unique. So if you defined ( means it 
I typed it at the interactive terminal prompt,

 d = { 'filled' : 'apple' , 'filled' : 'orange' }

and do a 

 print d

it will show:
 
{'filled': 'orange'}

One way to solve this problem is to define two dictionaries. 
One holding the status of the variable, the other one holding
the data. For example:

status = { 'a' : 'filled',  'b' : 'empty', 'c' : 'filled' }
data   = { 'a' : 'orange',  'b' : 'apple', 'c' : 'banana' }

for k in status:
if status[k]=='filled':
print data[k]

Regards and let us know if it works for you,

Marco
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Why isn't this code working how I want it to?

2013-10-12 Thread Peter Otten
reubennott...@gmail.com wrote:

 I've been working on a program and have had to halt it due a slight
 problem. Here's a basic version of the code:
 
 a = 'filled'
 b = 'filled'
 c = 'empty'
 d = 'empty'
 e = 'filled'
 f = 'empty'
 g = 'filled'
 
 testdict = {a : 'apple' , b : 'banana' , c : 'cake' , d : 'damson' , e :
 'eggs' , f : 'fish' , g : 'glue'}

You have duplicate keys here, which becomes obvious when you spell out the 
values

testdict = {filled: apple, filled: banana, ...}

When you do that, the last value (banana) wins, all others (e. g. apple) 
are dropped.

 Now what I want to do, is if a variable is filled, print it out. This
 however isn't working how I planned. The following doesn't work.
 
 for fillempt in testdict:
 if fillempt == 'filled':
 print(testdict[fillempt])
 
 All this does though, is print glue, where I'd want it to print:
 
 apple
 banana
 eggs
 glue
 
 Perhaps a dictionary isn't the best way to do this.. I wonder what else I
 can do...

A dictionary is spot-on, but you have to use the unique apple, 
banana,... as keys:

 status = {apple: filled, banana: filled, cake: empty}
 for item in status:
... if status[item] == filled:
... print(item)
... 
apple
banana

Could it be that you just confused dict keys with dict values?

-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Why isn't this code working how I want it to?

2013-10-12 Thread Mark Lawrence

On 12/10/2013 09:56, reubennott...@gmail.com wrote:

I've been working on a program and have had to halt it due a slight problem. 
Here's a basic version of the code:

a = 'filled'
b = 'filled'
c = 'empty'
d = 'empty'
e = 'filled'
f = 'empty'
g = 'filled'

testdict = {a : 'apple' , b : 'banana' , c : 'cake' , d : 'damson' , e : 'eggs' 
, f : 'fish' , g : 'glue'}

Now what I want to do, is if a variable is filled, print it out. This however 
isn't working how I planned. The following doesn't work.

for fillempt in testdict:
 if fillempt == 'filled':
 print(testdict[fillempt])

All this does though, is print glue, where I'd want it to print:

apple
banana
eggs
glue

Perhaps a dictionary isn't the best way to do this.. I wonder what else I can 
do...

Thanks for any help.



You've effectively set up a dictionary with keys 'filled' and 'entries' 
which you can see if you run this loop


for key, value in testdict.items():
print(key, value)

which gives me this

empty fish
filled glue

I'm too lazy to type anything else so please refer to this 
http://stackoverflow.com/questions/843277/how-do-i-check-if-a-variable-exists-in-python. 
 I'll also leave the argument over whether it's a variable or a name to 
others :)


--
Roses are red,
Violets are blue,
Most poems rhyme,
But this one doesn't.

Mark Lawrence

--
https://mail.python.org/mailman/listinfo/python-list


Re: Why isn't this code working how I want it to?

2013-10-12 Thread Jussi Piitulainen
reubennott...@gmail.com writes:

 [...] The following doesn't work.
 
 for fillempt in testdict:
 if fillempt == 'filled':
 print(testdict[fillempt])

This is equivalent to

for fillempt in testdict:
   if fillempt == 'filled':
  print(testdict['filled'])

which in turn can be optimized to

if 'filled' in testdict:
   print(testdict['filled'])

without knowing anything of the contents of tesdict.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Why isn't this code working how I want it to?

2013-10-12 Thread reubennottage
On Saturday, October 12, 2013 10:20:24 AM UTC+1, Peter Otten wrote:
 reubennott...@gmail.com wrote:
 
 
 
  I've been working on a program and have had to halt it due a slight
 
  problem. Here's a basic version of the code:
 
  
 
  a = 'filled'
 
  b = 'filled'
 
  c = 'empty'
 
  d = 'empty'
 
  e = 'filled'
 
  f = 'empty'
 
  g = 'filled'
 
  
 
  testdict = {a : 'apple' , b : 'banana' , c : 'cake' , d : 'damson' , e :
 
  'eggs' , f : 'fish' , g : 'glue'}
 
 
 
 You have duplicate keys here, which becomes obvious when you spell out the 
 
 values
 
 
 
 testdict = {filled: apple, filled: banana, ...}
 
 
 
 When you do that, the last value (banana) wins, all others (e. g. apple) 
 
 are dropped.
 
 
 
  Now what I want to do, is if a variable is filled, print it out. This
 
  however isn't working how I planned. The following doesn't work.
 
  
 
  for fillempt in testdict:
 
  if fillempt == 'filled':
 
  print(testdict[fillempt])
 
  
 
  All this does though, is print glue, where I'd want it to print:
 
  
 
  apple
 
  banana
 
  eggs
 
  glue
 
  
 
  Perhaps a dictionary isn't the best way to do this.. I wonder what else I
 
  can do...
 
 
 
 A dictionary is spot-on, but you have to use the unique apple, 
 
 banana,... as keys:
 
 
 
  status = {apple: filled, banana: filled, cake: empty}
 
  for item in status:
 
 ... if status[item] == filled:
 
 ... print(item)
 
 ... 
 
 apple
 
 banana
 
 
 
 Could it be that you just confused dict keys with dict values?

This fixed it, thank you! I did think a dictionary was right; I never 
considered swapping the keys with the values, though. A simple 'fix, but it 
worked. You've been a great help. 
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Why isn't this code working how I want it to?

2013-10-12 Thread Mark Lawrence

On 12/10/2013 12:03, reubennott...@gmail.com wrote:

On Saturday, October 12, 2013 10:20:24 AM UTC+1, Peter Otten wrote:

reubennott...@gmail.com wrote:




I've been working on a program and have had to halt it due a slight



problem. Here's a basic version of the code:







a = 'filled'



b = 'filled'



c = 'empty'



d = 'empty'



e = 'filled'



f = 'empty'



g = 'filled'







testdict = {a : 'apple' , b : 'banana' , c : 'cake' , d : 'damson' , e :



'eggs' , f : 'fish' , g : 'glue'}




You have duplicate keys here, which becomes obvious when you spell out the

values



testdict = {filled: apple, filled: banana, ...}



When you do that, the last value (banana) wins, all others (e. g. apple)

are dropped.




Now what I want to do, is if a variable is filled, print it out. This



however isn't working how I planned. The following doesn't work.







for fillempt in testdict:



 if fillempt == 'filled':



 print(testdict[fillempt])







All this does though, is print glue, where I'd want it to print:







apple



banana



eggs



glue







Perhaps a dictionary isn't the best way to do this.. I wonder what else I



can do...




A dictionary is spot-on, but you have to use the unique apple,

banana,... as keys:




status = {apple: filled, banana: filled, cake: empty}



for item in status:


... if status[item] == filled:

... print(item)

...

apple

banana



Could it be that you just confused dict keys with dict values?


This fixed it, thank you! I did think a dictionary was right; I never 
considered swapping the keys with the values, though. A simple 'fix, but it 
worked. You've been a great help.



That's good to hear.

Would you please read and digest this 
https://wiki.python.org/moin/GoogleGroupsPython if you need to post 
again, a quick glance above will soon tell you why :)


--
Roses are red,
Violets are blue,
Most poems rhyme,
But this one doesn't.

Mark Lawrence

--
https://mail.python.org/mailman/listinfo/python-list