d = {}
# To add a key->value pair, do this:
d.setdefault(key, []).append(value)
# To retrieve a list of the values for a key
list_of_values = d[key]
# To remove a key->value pair is still easy, if
# you don't mind leaving empty lists behind when
# the last value for a given key is removed:
d[key].remove(value)
# Despite the empty lists, it's still possible to
# test for the existance of values easily:
if d.has_key(key) and d[key]:
pass # has some values for key
else:
pass # no values for key
# But be warned... this version allows each value
# to be present multiple times:
example = {}
example.setdefault('a', []).append('apple')
example.setdefault('b', []).append('boots')
example.setdefault('c', []).append('cat')
example.setdefault('a', []).append('ant')
example.setdefault('a', []).append('apple')
# NOTE: now example['a'] == ['apple', 'ant', 'apple']
example['a'].remove('apple')
# NOTE: it's still true that ('apple' in example['a'])