[Tutor] how to delete some quasi-duplicated keys

lina lina.lastname at gmail.com
Sat Nov 26 03:49:40 CET 2011


On Sat, Nov 26, 2011 at 12:49 AM, Andreas Perstinger
<andreas.perstinger at gmx.net> wrote:
> On 2011-11-25 13:40, lina wrote:
>>
>> On Fri, Nov 25, 2011 at 7:19 PM, Steven D'Aprano<steve at 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.
Thanks, I was so careless.

        for k, v in occurence.items():
            print(v,k)

292 frozenset({66, 69})
222 frozenset({24, 27})


How can I let the result like:

292 {66,69}
222 {24,27}

don't output the frozenset

>
> 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 at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>


More information about the Tutor mailing list