append to the end of a dictionary

Steven D'Aprano steve at REMOVETHIScyber.com.au
Tue Jan 24 16:07:49 EST 2006


On Tue, 24 Jan 2006 16:01:48 +0100, Yves Glodt wrote:

> that means I can neither have a dictionary with 2 identical keys but 
> different values...?

Yes, that's correct.

> I would need e.g. this:
> (a list of ports and protocols, to be treated later in a loop)
> 
> 
> 
> ports = {'5631': 'udp', '5632': 'tcp', '3389': 'tcp', '5900': 'tcp'}

Which will work perfectly fine as a dict, because you have unique keys but
multiple values. Two keys with the same value is allowed.

Question: is there a reason the port numbers are stored as strings instead
of numbers?


> #then:
> for port,protocol in ports.iteritems():
> ________print port,protocol
> ________#do more stuff
> 
> 
> What would be the appropriate pythonic way of doing this?


Is it even possible to have multiple protocols listening on the
same port? Doesn't matter I suppose. Associating multiple values to the
same key is easy: just store the values in a list:


foods = { "red": ["apple", "tomato", "cherry"], 
          "green": ["apple", "lettuce", "lime"], 
          "blue": ["blueberry"],
          "yellow": ["butter", "banana", "apple", "lemon"] }

# add a new colour
foods["orange"] = ["orange"]
# add a new food to a colour
foods["red"].append("strawberry")

for colour, foodlist in foods.iteritems():
    for food in foodlist:
        print colour, food


If you need to use the keys in a particular order, extract the keys and
sort them first:

colours = foods.keys()
colours.sort()
for colour in colours:
    for food in foods[colour]:
        print colour, food



-- 
Steven.




More information about the Python-list mailing list