> ok so assuming I had a dictionary with 1key that contained a list like > so... dictionary[key1][0] > > How would I increment it or assign it if it didn't exist. I assumed like > this. dict[key1][0] = dictionary.get(key1[0],0) + X
Hi Paul, Given a dictionary d and some arbitrary key k, let's assume two possibilities: 1. k is a key in d. If so, no problem, and we'll assume that d[k] is associated to some twelve-element list. 2. k isn't yet a key in d. This is the situation we want to work on. We can go the uncomplicated route and just say something like this: if k not in d: d[k] = [0] * 12 in which case we change Possibility 2 to Possibility 1: the end result is that we make sure that d[k] points to a twelve-element list of zeros. Once we guarantee this, we can go on our merry way. For example: if k not in d: d[k] = [0] * 12 d[k][0] += 1 There is a one-liner way of doing this: we can use the setdefault() method of dictionaries. d.setdefault(k, [0] * 12)[0] += 1 This is a bit dense. There's no shame in not using setdefault() if you don't want to. *grin* I actually prefer the longer approach unless I'm really in a hurry. This being said, what data are you modeling? It almost sounds like you're implementing some kind of 3d matrix, even a sparse one. More information about the data you're modelling might lead to a different representation For example, would using a dictionary whose keys are three-tuples be approrpriate? ###### def increment(d, x, y, z): """Given a dictionary whose keys are 3-tuples, increments at the position (x, y, z).""" d[(x, y, z)] = d.get((x, y, z), 0) + 1 ###### Here's this code in action: ### >>> map = {} >>> increment(map, 3, 1, 4) >>> map {(3, 1, 4): 1} >>> increment(map, 2, 7, 1) >>> map {(2, 7, 1): 1, (3, 1, 4): 1} >>> increment(map, 2, 7, 1) >>> map {(2, 7, 1): 2, (3, 1, 4): 1} ### Best of wishes to you! _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor