On 2011-11-25 13:40, lina wrote:
On Fri, Nov 25, 2011 at 7:19 PM, Steven D'Aprano<st...@pearwood.info>  wrote:
 f = open("some file")
 dehydrons = {}
 occurrence = {}
 pairs = {}
 for line in f.readlines():
     parts = line.split()
     # convert to ints
     parts = [int(s) for s in parts]
     pair = frozenset(parts[:2])  # order doesn't matter
     if pair in dehydrons:
         occurrence[pair] += 1
     else:
         dehydrons[pair] = parts[2]
         occurrence[pair] = 1
         pairs[pair] = pairs.get(pair, 0) + parts[2]
 f.close()

         for line in f.readlines():
             parts = line.split()
             #pair=set((parts[0],parts[1]))
             #convert to ints
             parts = [int(s) for s in parts]
             pair = frozenset(parts[:2])
             print(pair)
             if pair in dehydrons:
                 occurence[pair] += 1
             else:
                 dehydrons[pair] = parts[2]
                 pairs[pair] = pairs.get(pair,0) + parts[2]
         print(pairs)


$ python3 dehydron_data_frozenset_version.py
frozenset({2, 15})
frozenset({2, 15})
Traceback (most recent call last):
   File "dehydron_data_frozenset_version.py", line 35, in<module>
     occurence[pair] += 1
KeyError: frozenset({2, 15})

You want to add one to "occurence[frozenset({2, 15})]" but there is no such key in "occurence" yet.

If you carefully re-read Steven's code snippet you will see that you missed the line

occurence[pair] = 1

in the else-branch.

Therefore "occurence[frozenset({2, 15})]" wasn't set in the first iteration and you get the error in the second. You can see that you are already in the second iteration by looking at the output of your program before the error message.

Bye, Andreas
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to