[Tutor] how to delete some quasi-duplicated keys
Steven D'Aprano
steve at pearwood.info
Fri Nov 25 12:19:28 CET 2011
lina wrote:
> On Fri, Nov 25, 2011 at 5:06 PM, Steven D'Aprano <steve at pearwood.info> wrote:
>> pair = frozenset(('66', '69'))
>> pairs[pair] = pairs.get(pair, 0) + value
>
> I don't get this "pairs.get" part.
The "get" method does a look-up on a dict, but instead of failing if the
key is missing, it returns a default value:
py> d = {'a': 2}
py> d['b'] # fails
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'b'
py> d.get('b', 3) # use 3 as the default
3
> pairs[pair]=pairs.get(pair,0)+parts[2]
> TypeError: unsupported operand type(s) for +: 'int' and 'str'
Lina, in your original example, the values of the dict are integers:
{('66', '69'): 217, ('69', '66'): 75, ('64', '71'): 25}
The error you show above can only happen if they are not integers, but
strings. When you show us examples, please get the examples right. If
you give us wrong information, how do you expect us to help?
You should convert all the strings into ints.
> or line in f.readlines():
> parts=line.split()
> #pair=set((parts[0],parts[1]))
> if (parts[0],parts[1]) not in dehydrons.keys():
> dehydrons[(parts[0],parts[1])]=parts[2]
> occurence[(parts[0],parts[1])]=1
> pair=frozenset(('parts[0]','parts[1]'))
> pairs[pair]=pairs.get(pair,0)+parts[2]
> else:
> occurence[(parts[0],parts[1])]+=1
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()
--
Steven
More information about the Tutor
mailing list